PHPCMS 整站代码分析讲解(五)

PHPCMS  整站代码分析讲解(五) 现在开始讲   index.php  首页文件 基本来说 PHPCMS 的加载到显示操作的整个流程都分析完了 . 大家看一遍后 . 还要整体的来看来分析 . 慢慢体会 . 把些好的思想和思路实现到自己以后的项目里 . 我相信大家都会变得很强的 记得 程序是死的 , 人是活的 . 有实现思路一切都好办了 . [Copy to clipboard]  [ - ] CODE: <?php /** 代码分析版权所有:逆雪寒 */ require './include/common.inc.php'; /** 看  common.inc.php  核心启动文件我们已经讲解完了。应该都明白了吧 */ if($PHPCMS['ishtml'] == 1 && file_exists(PHPCMS_ROOT.'/'.$PHPCMS['index'].'.'.$PHPCMS['fileext'])) { header('location:'.$PHPCMS['index'].'.'.$PHPCMS['fileext']); exit; } /** phpcms  允许在后台生静态和使用静态 , 这里就是先判断  $PHPCMS['ishtml']( 从文本缓存弄过来的。应该知道了吧 ) 是否为 就是开启了。和这个 静态的 html 文件是否存在。 */ $channels = array(); $channels['article'] = $channels['down'] = $channels['picture'] = $channels['info']= array(); foreach($CHANNEL as $v) { $module = $v['module']; if($v['islink'] == 0 && $MODULE[$module]['iscopy'] == 1) $channels[$module][$v['channelid']] = $v; } // 获取频道模块的信息。都是从缓存中取的 $head['title'] = $PHPCMS['seo_title']; $head['keywords'] = $PHPCMS['seo_keywords']; $head['description'] = $PHPCMS['seo_description']; //  这个是网页的 SEO (title,keywords,description) 信息。这个写好了。网络蜘蛛会找你哦。 include template('phpcms', 'index'); //  template()  函数是模板函数。这个就是这章的主题。往下会讲模板引擎的制作 , 大家都看到 include  了吧。它的参数是文件地址。那么就可以想到  template() 函数其实就是 //   模板编译后的 PHP 文件地址。 phpcache(); /** 这个函数厉害了。用来自动生缓存页的(这个是页面缓存和数据库信息的文本缓存不是一会事) , 页面缓存,就是把你所看的页自动生成  XX.html  静态页。请注意前面代码。是不是有个  header() 跳转到静态页呀。 那静态页那里来的?就是给这个函数弄出来的。自动静态化了其实。 @@ 是不是很简单呢。上菜先: function phpcache($is_js = 0) { global $CONFIG,$cachefiledir,$cachefile; if(!$is_js && $CONFIG['phpcache'] != '2') return FALSE; $contents = ob_get_clean(); if($is_js) $contents = strip_js($contents); if($CONFIG['phpcache'] == '2' && $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-Control: no-cache, must-revalidate');   这句  session_cache_limiter('private')  作用差不多。就是用户 点击后退不会出现警告页。十分有用哦。大家别忘了 header('Pragma: no-cache');  不缓存当前页 。其实和前一句一样意思,这句不过是为了兼容 http1.0 协议。 echo $contents; // 输出内容。 } 首先判断。文件当前文件不是 JS 问文件和后台打开了页面缓存静态化 , 。然后使用了 OB 读写缓冲区系列函数来操作缓冲区。 ob_get_clean()  函数。十分有用。一般我们做整站静态化也是利用 OB 系列函数来实现。 这个函数就是获取当前缓冲区的 HTML 内容。然后把将要输出的缓冲区内容清除掉。网页先是一点点读到浏览器的缓冲区。当缓冲区满了以后才会放出来。所以我们 可以用 OB 系列函数在缓冲区没有输出之前截取内容来做我们要做的过滤等动作。 (dz 的伪静态有部分就这样实现的。把缓冲区中的所有超级连接地址更改成 :thread-46695-1-3.html  形式。然后 apache  那边再用 .hataccess  来做判断跳转 这里也是。我们获取将要输出的内容以后 调用  strip_js()  这个函数来过滤 HTML 内容。 因为比较简单继续上菜: function strip_js($string, $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()  函数。截取内容后清空了输出的内容。那就是浏览器成了空白页了。所以我们要手动的来  echo  输出内容给客户看。 echo  前呢 还有些东西要做就是  header  几个 http 协议头过去 注释已经给出。详细的百度: http 协议,会有详细的参数说明 。其主要目的是:强制用户每次访问这个页面时获取最新资料,而不是使用存在客户端的缓存。 */ ?> 继续 function strip_js($string, $js = 1) { $string = str_replace(array("\n","\r","\""),array('','',"[url=]\\\""),$string[/url]); return $js==1 ? "document.write(\"".$string."\");\n" : $string; } $js  为  1 的时候 是 document.write   内容 . JS 格式我也不知道是什么格式 . 看功能 . 它只是很简单、的过滤掉  \n \r \  而已 .  

转载于:https://www.cnblogs.com/gxldan/archive/2011/10/26/4066765.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值