平时我们修改模板其实刷新页面,如果文章数量较少还可以,如果网站的体量已经非常大,例如已经数百万或者已经达到千万数据,这时我们再刷新页面就是一件异常缓慢的事情。但我们可以通过让页面在有访问时自动生成,来省掉这一步。下面我们细细道来。
方法:首先删掉所有已经生成的文章html->利用nginx匹配未生成的html->php生成html,如果nginx 检测html已经生成,则直接展示,不跳转到php。
知道了上边的方法,也就明白了其实这个方法也有一定的限制,那就是只能用在nginx环境下,apache是用不了的。
nginx的配置
折叠展开XML/HTML 代码
- location /{
- alias /home/web/xxx.com/;
- if (!-e $request_filename) {
- rewrite /(.*)/(.*).html$ /chtml.php?classid=1&id=$2&ssid=$2&check=checkcode;
- }
- }
通过以上配置,用户在访问并不存在的html文件时,会自动展示chtml.php文件返回的内容,但这时网址不会跳转,其实就是实现了伪静态。
下面是chtml.php文件的详细内容:
折叠展开PHP 代码
- <?php
- $check= stripslashes($_GET['check']);
-
- require('./class/connect.php');
- require('./class/db_sql.php');
- require("./class/functions.php");
- require("./class/t_functions.php");
- require("./data/dbcache/class.php");
- require("./data/dbcache/MemberLevel.php");
- require('./class/chtmlfun.php');
- $link=db_connect();
- $empire=new mysqlquery();
-
- if($check=="checkcode"){
- ReSingleInfo('userid','username');
- }
-
- db_close();
- $empire=null;
- ?>
找到 /e/class/chtmlfun.php 文件,找到ReSingleInfo函数,帝国cms7.2版本是在651行,找到下面的代码
折叠展开PHP 代码
- $sql=$empire->query("select * from {$dbtbpre}ecms_".$class_r[$classid][tbname]." where ".$add);
在它的上面新增以下代码:
折叠展开PHP 代码
- $s_aid = (int)$_GET['ssid'];
- if($s_aid>0){
- $add="id=$s_aid";
- $classid=58;
- }
-
找到 /e/class/functions.php 文件,在其中找到 GetHtml 函数,在最后新增以下代码,用于直接显示生成后的html:
折叠展开PHP 代码
- $s_aid = $_GET['ssid'];
- $s_play = (int)$_GET['play'];
- $s_check = $_GET['check'];
- if($s_check=="checkcode"){
- if($s_aid && strstr($s_aid,"_play")){
- echo file_get_contents($file_p);
- }else{
- echo file_get_contents($file);
- }
- }
到这里就可以实现有用户访问时自动生成页面了。