PHP实现页面静态化

一、buffer认知
buffer:PHP存在的缓冲区,一个内存地址空间,主要用于存储数据区域
可在php.ini中打开参数
output_buffering = on
或者在PHP文件中手动开启
ob_start 打开输出控制缓冲
ob_get_contents 返回输出缓冲区内容
ob_clean 清空输出缓冲区,清空后不会在终端显示
ob_get_clean 得到当前缓冲区的内容并删除当前缓冲区内容,清空后不会在终端显示

二、实现静态化方式
1、file_put_contents(“静态页面文件名”,需要存储的数据)
2、使用PHP内置缓存机制实现页面静态化
ob_start() –>
require(“文件”) /模板文件 –>
if(file_get_contents(“文件名”, ob_get_contents()){}else{}
ob_end_flush();
3、fopen->fwrite->fclose

三、触发系统生成静态化页面的方式
1、页面添加缓存时间
2、手动触发方式
3、crontab定时扫描程序(Linux)

四、实例
1、页面添加缓存时间

<?php
$gid = $_GET['gid'];//商品id
$goods_statics_file = "goods_file_".$gid.".html";//对应静态页文件
$expr = 3600*24*5//静态文件有效期5天
if(file_exists($goods_statics_file)){
    $file_mtime =filemtime($goods_statics_file);//文件修改时间
    if(time() - $file_mtime < $expr){//如果没过期
         echo file_get_contents($goods_statis_file);//输出静态文件内容
         exit;
     }else{//如果已过期
         unlink($goods_statis_file);//删除过期的静态页文件
         ob_start();

            //从数据库读取数据,并赋值给相关变量

            //include ("xxx.html");//加载对应的商品详情页模板

            $content = ob_get_contents();//把详情页内容赋值给$content变量
            file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
            ob_end_flush();//输出商品详情页信息
     }
}else{
    ob_start();

    //从数据库读取数据,并赋值给相关变量

    //include ("xxx.html");//加载对应的商品详情页模板

    $content = ob_get_contents();//把详情页内容赋值给$content变量
    file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
    ob_end_flush();//输出商品详情页信息

}

?>

五、局部动态化实现
ajax

六、伪静态
1、通过正则表达式处理
http://index.com/newlist.php?type=2&catogory_id=1
/newlist.php/2/1.html
备注:Nginx服务器不支持pathinfo模式
preg_match(‘/^\/(\d+)\/(\d+).html/’, $_SERVER[‘PATH_INFO’], $match);
$type = $match[1];
$category_id = $match[2];

2、web服务器rewrite配置
Apache下rewrite配置:
(1) 虚拟域名配置
httpd.conf文件中开启相关模式
LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-vhosts.conf(Apache默认是Include conf/vhosts.conf)
找到hosts文件配置域名
(2) httpd_vhosts.conf配置文件相关信息
在.htaccess中加入

<IfModule mod_rewrite.c>
RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ /index.php [L,E=PATH_INFO:$1] 
</IfModule>

http://jeecn.com/path?key=value 转换为: http://jeecn.com/path/key/value
RewriteCond %{QUERY_STRING} ^(\w+)=(\w+)$
RewriteRule ^/path /path/%1/%2?

RewriteRule重写规范flag说明
[R=301] 强制外部重定向 301永久重定向 302临时重定向 默认302
[C] 链接下一条规则,如果这一条不匹配,下一条就不进入
[L] 结束规则,立即停止重写操作,并不再应用其他重写规则
[NE] 不对URL中的特殊字符进行hexcode转码
[NC] 不区分大小写
[QSA] 用于在URL中截取查询字符串
[G] Apache服务器返回410
[F] (force URL to be forbidden)禁用URL,返回403HTTP状态码。
[N](next round) 重新从第一条规则开始运行重写过程。
[T]=MIME-type(force MIME type) 强制MIME类型
[NS] (used only if no internal sub-request) 只用于不是内部子请求
[PT](pass through to next handler) 传递给下一个处理
例如:
RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理
Alias /def /ghi
[S]=num(skip next rule(s)) 跳过num条规则
[E]=VAR:VAL(set environment variable) 设置环境变量

RewriteBase URL-path 设置了目录级重写的基准URL

RewriteCond 指定定义了一个规则的条件,即在RewriteRule前加一个条件

1、TestString 使用说明 19 1-9 引用紧跟在RewriteCond后面的RewriteRule中模板中匹配的数据

2、TestString 使用说明 %{NAME_OF_VARIABLE} 服务器变量引用

3、TestString 使用说明 %1-9
%1-9 RewriteCond条件中最后符合的条件中的分组成分

4、CondPattern 使用说明
-d 是否是目录 -f 是否是文件

5、[flags]使用说明
[NC] 不区分大小写

[OR] 或语法,如果不加,默认为and

RewriteMap
MapName 命名给RewriteRule调用
MapType 文件类型有txt、rnd
MapSource map文件路径

基于重定向的文件访问控制
防盗链:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !www.example.com [NC]
RewriteRule \.(gif|jpg|png)$ [F,NC]

限制IP

RewriteMap  hosts-deny(拒绝的地址)
RewriteCond ${hosts-deny:%{REMOE_ADDR} | NOTFOUND} deny [OR]
RewriteCond ${hosts-deny:%{REMOTE_HOST} | NOTFOUND} deny
RewriteRule ^ - [F]

限制迅雷
先通过代码分析出迅雷特征

RewriteCond %{HTTP_USER_AGENT} 2.0.50727 [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^BlackWido [NC,OR]
RewriteRule . abuse.txt

然后奖abuse.txt文件放到主目录下

thinkPHP配置URL

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值