phpcms整站源码分析

上传人:第*** 文档编号:34614349 上传时间:2018-02-26 格式:DOC 页数:21 大小:102.50KB
返回 下载 相关 举报
phpcms整站源码分析_第1页
第1页 / 共21页
phpcms整站源码分析_第2页
第2页 / 共21页
phpcms整站源码分析_第3页
第3页 / 共21页
phpcms整站源码分析_第4页
第4页 / 共21页
phpcms整站源码分析_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《phpcms整站源码分析》由会员分享,可在线阅读,更多相关《phpcms整站源码分析(21页珍藏版)》请在金锄头文库上搜索。

1、/*代码分析版权所有:逆雪寒*/require ./include/common.inc.php;/*看 common.inc.php 核心启动文件我们已经讲解完了。应该都明白了吧*/if($PHPCMSishtml = 1 & file_exists(PHPCMS_ROOT./.$PHPCMSindex.$PHPCMSfileext)header(location:.$PHPCMSindex.$PHPCMSfileext);exit;/*phpcms 允许在后台生静态和使用静态 ,这里就是先判断 $PHPCMSishtml(从文本缓存弄过来的。应该知道了吧 )是否为 1 就是开启了。和这个

2、静态的 html 文件是否存在。*/$channels = array();$channelsarticle = $channelsdown = $channelspicture = $channelsinfo= array();foreach($CHANNEL as $v)$module = $vmodule;if($vislink = 0 & $MODULE$moduleiscopy = 1) $channels$module$vchannelid = $v;/获取频道模块的信息。都是从缓存中取的$headtitle = $PHPCMSseo_title;$headkeywords = $

3、PHPCMSseo_keywords;$headdescription = $PHPCMSseo_description;/ 这个是网页的 SEO (title,keywords,description)信息。这个写好了。网络蜘蛛会找你哦。include template(phpcms, index);/ template() 函数是模板函数。这个就是这章的主题。往下会讲模板引擎的制作 ,大家都看到 include 了吧。它的参数是文件地址。那么就可以想到 template()函数其实就是/ 模板编译后的 PHP 文件地址。phpcache();/*这个函数厉害了。用来自动生缓存页的(这个是页

4、面缓存和数据库信息的文本缓存不是一会事) ,页面缓存,就是把你所看的页自动生成 XX.html 静态页。请注意前面代码。是不是有个 header()跳转到静态页呀。那静态页那里来的?就是给这个函数弄出来的。自动静态化了其实。 是不是很简单呢。上菜先:function phpcache($is_js = 0)global $CONFIG,$cachefiledir,$cachefile;if(!$is_js $contents = ob_get_clean();if($is_js) $contents = strip_js($contents);if($CONFIGphpcache = 2 &

5、$cachefiledir & $cachefile)dir_create($cachefiledir);file_put_contents($cachefile, $contents);chmod($cachefile, 0777);header(Expires: Mon, 26 Jul 2000 05:00:00 GMT); 告诉浏览器此页面的过期时间 (用格林威治时间表示 ),只要是已经过去的日期即可header(Last-Modified: .gmdate(D, d M Y H:i:s). GMT); 告诉服务器本页最后修改日期。目的就是强迫浏览器获取最新资料header(Cache-

6、Control: no-cache, must-revalidate); 这句 session_cache_limiter(private) 作用差不多。就是用户 点击后退不会出现警告页。十分有用哦。大家别忘了header(Pragma: no-cache); 不缓存当前页 。其实和前一句一样意思,这句不过是为了兼容 http1.0 协议。echo $contents; /输出内容。首先判断。文件当前文件不是 JS 问文件和后台打开了页面缓存静态化 ,。然后使用了 OB 读写缓冲区系列函数来操作缓冲区。ob_get_clean() 函数。十分有用。一般我们做整站静态化也是利用 OB 系列函数来

7、实现。这个函数就是获取当前缓冲区的 HTML 内容。然后把将要输出的缓冲区内容清除掉。网页先是一点点读到浏览器的缓冲区。当缓冲区满了以后才会放出来。所以我们可以用 OB 系列函数在缓冲区没有输出之前截取内容来做我们要做的过滤等动作。 (dz 的伪静态有部分就这样实现的。把缓冲区中的所有超级连接地址更改成 : thread-46695-1-3.html 形式。然后 apache 那边再用 .hataccess 来做判断跳转 ) 这里也是。我们获取将要输出的内容以后 调用 strip_js() 这个函数来过滤 HTML 内容。 因为比较简单继续上菜:function strip_js($strin

8、g, $js = 1)$string = str_replace(array(n,r,),array(,url=),$string/url);return $js=1 ? document.write(.$string.);n : $string;主要是来过滤内容里面的 n 换行 、 r 换页符 和 具体请百度:制表符继续我们上个函数 strip_js 过滤完内容后。 在使用 file_put_contents() 函数 把内容写到文件里面去。也就是那个 HTML 静态页 ,恩完成了。当前页的静态页已经存在了。但好象不对是吧。因为你刚用了 ob_get_clean() 函数。截取内容后清空了输

9、出的内容。那就是浏览器成了空白页了。所以我们要手动的来 echo 输出内容给客户看。 echo 前呢还有些东西要做就是 header 几个 http 协议头过去 注释已经给出。详细的百度: http 协议,会有详细的参数说明 。其主要目的是:强制用户每次访问这个页面时获取最新资料,而不是使用存在客户端的缓存。*/?关于 phpcms cache 原理,探讨phpcms 二次开发 QQ:267014881 长沙 php 交流软件版本 :phpcms2008 Linux 王国 转载请注明原处a.页面缓存,在后台 网站配置- 性能优化中,配置了启用 PHP 页面缓存if(CACHE_PAGE /看

10、是否调用页面缓存global.func.php 有如下函数function cache_page_start()define(CACHE_PAGE_ID, md5(RELATE_URL); /定义 cache 文件的 id,其中 RELATE_URL 在,common.inc.php 中/define(RELATE_URL, isset($_SERVERREQUEST_URI) ? $_SERVERREQUEST_URI : SCRIPT_NAME.(QUERY_STRING ? ?.QUERY_STRING : PATH_INFO);/把本身的 url+它 get 后的参数,两者 md5 加

11、密,用来查找和生成 cache-iddefine(CACHE_PAGE_DIR, CACHE_PAGE_PATH.substr(CACHE_PAGE_ID, 0, 2)./);/页面缓存配置(config.inc.php)/define(CACHE_PAGE, 0); /是否开启 PHP 页面自动缓存功能/define(CACHE_PAGE_PATH, PHPCMS_ROOT.data/cache_page/); /缓存存储路径/define(CACHE_PAGE_TTL, 3600); /秒,缓存默认生命周期/define(CACHE_PAGE_INDEX_TTL, 300); /秒,缓存默

12、认生命周期/define(CACHE_PAGE_CATEGORY_TTL, 600); /秒,缓存默认生命周期/define(CACHE_PAGE_LIST_TTL, 900); /秒,缓存默认生命周期/define(CACHE_PAGE_CONTENT_TTL, 14400); /秒,缓存默认生命周期/PHPCMS_ROOT.data/cache_page/+cacheid 的前三位define(CACHE_PAGE_FILE, CACHE_PAGE_DIR.CACHE_PAGE_ID.html); /加载 cache 文件$contents = file_get_contents(CACH

13、E_PAGE_FILE);if($contents & intval(substr($contents, 15, 25) TIME) /判断是否过期,如果没有,就输出文件 29 个字符以后的所有文件echo substr($contents, 29);exit;return true;/生成 cahe 文件function cache_page($ttl = CACHE_PAGE_TTL, $isjs = 0)if($ttl = 0 | !defined(CACHE_PAGE_FILE) return false;$contents = ob_get_contents();if($isjs)

14、$contents = format_js($contents); /读入数据,格式化 jsdir_create(CACHE_PAGE_DIR);$contents = n.$contents; /加上时间和超时时间,以到后面取的时候好对比file_put_contents(CACHE_PAGE_FILE, $contents); /写入文件chmod(CACHE_PAGE_FILE, 0777);/清除所有的 cache 文件,也是 data/cache_page 下的文件function cache_page_clear()set_time_limit(600);$dirs = glob(

15、CACHE_PAGE_PATH.*);foreach($dirs as $dir)$files = glob($dir./*);foreach($files as $file)unlink($file);rmdir($dir);/统计 cache 的更新时间和并写到数据库,比如更新时间,更新了多少次/$M = $TEMP = array();function cache_count($sql)global $db, $TEMP;$id = md5($sql);if(!isset($TEMPcount$id)if(CACHE_COUNT_TTL)$r = $db-get_one(SELECT count,updatetime FROM .DB_PRE.cache_count WHERE id=$id);if(!$r | $rupdatetime get_one($sql)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号