php学习
您所在的位置:封程中个人博客 > 后端开发 > php学习 >

php将当前动态网页生成为静态html网页的解决方案

字号+ 作者:封程中 来源:封程中个人博客 2015-12-06 15:40 阅读(0) 我要评论(0)

最近接了个私活,具体情况是这样的. 网站全部是用伪静态的形式访问的,比如xxx.com/xx/123.html,记住噢,这只是伪静态,然后希望在访问一次这样的伪静态后,把当前网页内容生成...

最近接了个私活,具体情况是这样的.

网站全部是用伪静态的形式访问的,比如xxx.com/xx/123.html,记住噢,这只是伪静态,然后希望在访问一次这样的伪静态后,把当前网页内容生成为静态,第二次访问的时候就直接访问静态了,这样就不需要一直去查询数据库了,速度会快很多.

知道需求了,下面封程中就给大家一个方案.


1.首先肯定是要生成静态是吧,我是用ajax请求php来实现的.

在需要生成的静态html的文件最下面加入以下代码

<script type="text/javascript">

    function create(){

var host = 'http://'+window.location.host;

var url = window.location.href;

var path = window.location.pathname;

path = path.substring(1);

$.ajax({  

                    type : "POST",  //提交方式  

                    url : host+"/createHtml.php",//路径  

                    data : {  

                        "url" : url,

                        "path":path

                    },//数据,这里使用的是Json格式进行传输  

                    success : function(result) {//返回数据根据结果进行相应的处理  

                    }  

                });  

}

create();    

</script>;

这里其实就是相当于把当前的url和url文件后缀传入createHtml.php这个php接口里面.

2.然后再在根目录创建一个createHtml.php文件,不在根目录也可以,但是上面的路径需要改下.代码如下:

<?php

//设置静态文件路径及文件名 

$filename=$_POST['path'];

if(!file_exists($filename)) {

//获取文件内容 

$content=file_get_contents($_POST['url']);

//写入文件 

$fp = fopen($filename, 'w'); 

fwrite($fp, $content); 

}

?>

代码意思就是判断文件是否存在,不存在的话就生成文件.

(为什么我这里要用ajax呢?因为我不用ajax的话,他会存在死循环的情况)

现在你就发现你第一次访问的是动态,然后会生成html,但是第二次访问的时候还会是动态,接下来就是解决如何让他第二次访问的是静态的问题了.

解决办法有2种.


1.apache的配置文件里面加入

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-l


或者是.htaccess里面加入

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-l


意思就是如果存在静态,就直接访问静态,不继续往下面执行了,所以上面的代码要写在伪静态的上面.

2.有些apache或者服务器不支持上面的规则,所以只能用另外一种办法

创建showHtml.php文件,里面加入代码:

<?php

$path = $_SERVER['REQUEST_URI'];

$path=dirname(__FILE__).$path;

//设置静态文件路径及文件名 

$filename=$path;

if(file_exists($filename)){;

$handle = fopen($filename, "r");  

$contents = fread($handle, filesize ($filename));  

echo $contents;exit;

}

?>

然后在需要生成的动态文件最上面加入

<?php require_once 'showHtml.php';?>

这样的思路就是我一进入当前动态页(也就是目前的伪静态),我会根据url的目录判断当前是否存在这样的静态文件,存在的话我就把对应的静态html内容获取到,然后输出,不存在的话就继续显示动态页(也就是目前的伪静态)就好了.


希望封程中可以帮助到大家.

来源:(QQ号:604849147),原创文章如转载,请注明本文链接:http://fcz8k.com/php/501.html

 

1.如果您觉得文章帮助了您,可以点击下面的广告来支持我,谢谢!2.本站的原创文章,请转载时务必注明文章作者和来源,谢谢!3.作者投稿可能会经我们编辑修改或补充,并且会注明版权来源,谢谢!

相关文章
网友点评
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)