PHP 页面静态化/纯静态化/伪静态化
2015-08-03 11:43
766 查看
概念
PHP静态化分为:纯静态化和伪静态化;纯静态化又分为:局部静态化和完全静态化
纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销,
局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的;
完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面
伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost,com/index/post/12",是一个静态地址,该地址多见于博客地址,但伪静态化中,你访问的网址实际上经过服务器解析,还是会解析成类似于"http://yourhost,com/?c=index&a=post&id=12"的地址,所以称之为伪静态化
伪静态的优点:美观;便于搜索引擎收录
纯静态化的实现
利用php内置的ob函数实现页面的静态化,大概步骤如下:
[b]触发系统生成纯静态化页面[/b]
方法:页面添加缓存时间;手动触发
页面添加缓存时间
如果后台数据存在更细,定时刷新不能及时更改静态页面,怎么办?所有引入了手动触发的功能
手动触发
手动触发的大概样式就类似于优酷视频评论区,当有新评论时,会后一条屎黄屎黄的小提示框:“有新评论,点击更新”,也类似于app中的下滑刷新的机制,自己去寻找吧。。
除此之外还有Linux下的crontab定时扫描程序
局部静态化内容不做叙述
PHP伪静态
Apache服务器rewrite配置
在httpd.conf文件中,找到
如果你不会配置虚拟域名,可以参考我的另外一篇文章:WAMPServer配置修改及问题汇总
rewrite伪静态配置
RewriteEngine其他配置规则以后会再添加
现在你访问http://yourhost.com/vidio/12.html时,相当于访问了http://yourhost.com/vidio.php?id=12
问题:配置完上面的内容后,又存在以下问题?如果项目目录下存在该静态页面时,到底是访问我们的静态页面还是访问我们伪静态的文件呢?
经过测试我们发现,并不会访问静态页面,如果我们想访问我们的静态页面怎么办?
伪静态和静态页面冲突时解决办法:
PHP静态化分为:纯静态化和伪静态化;纯静态化又分为:局部静态化和完全静态化
纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销,
局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的;
完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面
伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost,com/index/post/12",是一个静态地址,该地址多见于博客地址,但伪静态化中,你访问的网址实际上经过服务器解析,还是会解析成类似于"http://yourhost,com/?c=index&a=post&id=12"的地址,所以称之为伪静态化
伪静态的优点:美观;便于搜索引擎收录
纯静态化的实现
利用php内置的ob函数实现页面的静态化,大概步骤如下:
<?phpob_start();//开启缓存 ?> <p>我是要生成的静态内容,也可以在该处链接数据库生成动态内容于此</p>
<?php
file_put_contents('index.html',ob_get_clean());//把生成的静态内容保存到index.html文件,而不是输出到浏览器
?>
[b]触发系统生成纯静态化页面[/b]
方法:页面添加缓存时间;手动触发
页面添加缓存时间
<?php
$file_name='index.html';
if(file_exists($file_name)&&filemtime($file_name)-time()<10){//如果文件是存在并且最后修改时间小于设定时间10s
//filemtime($file_name);//得到文件最后修改时间
//time();//当前时间
require_once($file_name);//引入文件
}else{
ob_start();
?>
<p>我是要生成的静态内容</p>
<?php
file_put_contents($file_name,ob_get_contents())//输出到浏览器
}
如果后台数据存在更细,定时刷新不能及时更改静态页面,怎么办?所有引入了手动触发的功能
手动触发
手动触发的大概样式就类似于优酷视频评论区,当有新评论时,会后一条屎黄屎黄的小提示框:“有新评论,点击更新”,也类似于app中的下滑刷新的机制,自己去寻找吧。。
除此之外还有Linux下的crontab定时扫描程序
*/5****php/data/static/index.php
局部静态化内容不做叙述
PHP伪静态
//静态:http://yourhost.com/index.php/12/2.html
//动态:http://yourhost.com/index.php?type=12&id=2
$pathinfo=$_SERVER['PATH_INFO'];
if(preg_match('/^\/(\d+)\/(\d+)/',$pathinfo,$path)){
$type=$path[1];
$id=$path[2];
echo'type=',$type,'&id=',$id;//获得type和id进一步处理
}else{
//错误处理
echo"err";
}
Apache服务器rewrite配置
在httpd.conf文件中,找到
#注释:去掉前边的"#"开启rewrite服务,重启服务器生效
#LoadModulerewrite_modulemodules/mod_rewrite.so
#注释:http-vhosts.conf文件是虚拟域名配置的文件,开启改文件可以配置虚拟域名,一般默认是开启的
#Includeconf/extra/httpd-vhosts.conf
如果你不会配置虚拟域名,可以参考我的另外一篇文章:
rewrite伪静态配置
<VirtualHost*:80>
ServerAdminwebmaster@dummy-host.example.com
DocumentRoot"c:/Apache24/docs/dummy-host.example.com"
ServerNamedummy-host.example.com
ServerAliaswww.dummy-host.example.com
ErrorLog"logs/dummy-host.example.com-error.log"
CustomLog"logs/dummy-host.example.com-access.log"common
#配置规则如下所示
RewriteEngineon
RewriteRule^/vidio/([0-9]*).html$/vidio.php?id=$1
</VirtualHost>
RewriteEngine其他配置规则以后会再添加
现在你访问http://yourhost.com/vidio/12.html时,相当于访问了http://yourhost.com/vidio.php?id=12
问题:配置完上面的内容后,又存在以下问题?如果项目目录下存在该静态页面时,到底是访问我们的静态页面还是访问我们伪静态的文件呢?
经过测试我们发现,并不会访问静态页面,如果我们想访问我们的静态页面怎么办?
伪静态和静态页面冲突时解决办法:
#完整的配置规则如下
RewriteEngineon
#添加以下两项,!-d和!-f分别表示目录和文件
#当访问的伪静态和相应的静态目录和文件冲突时,访问静态页面
RewriteCond%{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
RewriteCond%{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-f
RewriteRule^/index/([0-9]*).html$/index.php?id=$1
相关文章推荐
- PHP合并数组+与array_merge的区别分析
- php反射api
- PHP快速学习总结
- 安装php调试程序,xdebug扩展
- php5.3.3 gdb breakpoints
- [php] 获取serializeArray()提交的数据并处理
- FTP主动模式和被动模式的区别
- PHP在Windows IIS上传的图片无法访问的解决方法
- php中ob函数缓冲机制深入理解
- php static关键字
- php 中的 short_open_tag 的作用
- 基于php-fpm的配置详解[转载]
- php7(PHPNG) windows环境下部署
- PHP中汉字转拼音
- php访问控制(public protected private)
- Laravel 加载PHPEXCEL
- ThinkPHP 验证码 session被清空
- TP上传文件图片总结
- PHP Socket 编程过程详解
- PHP之GD库