PHP 页面静态化/纯静态化/伪静态化

PHP静态化分为:纯静态化 和 伪静态化;
纯静态化又分为:局部静态化 和 完全静态化
伪静态化常用来做url的重写匹配

纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销,访问速度快。

1.局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的;通过部分接口来调用更新局部动态数据

2.完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面

伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost.com/index/post/12",是一个静态地址,但伪静态化中,你访问的网址实际上经过服务器解析,还是会解析成类似于"http://yourhost.com/?c=index&a=post&id=12"的地址,所以称之为伪静态化。

伪静态的优点:美观;便于搜索引擎收录

纯静态化的实现

利用php内置的ob函数实现页面的静态化,大概步骤如下:

<?php 
ob_start();//开启缓存 
echo "<p>我是要生成的静态内容,也可以在该处链接数据库生成动态内容于此</p>"

file_put_contents( 'index.html', ob_get_clean() );
//把生成的静态内容保存到index.html文件,而不是输出到浏览器
?>

触发系统生成纯静态化页面

方法:页面添加缓存时间;手动触发

页面添加缓存时间

<?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( );
 echo "<p>我是要生成的静态内容</p>";
 file_put_contents( $file_name,  ob_get_contents());//输出到浏览器
}

如果后台数据存在更新,定时刷新不能及时更改静态页面,怎么办?所有引入了手动触发的功能

手动触发

手动触发可以在后台设置一个功能,点击按钮立即生成新的静态页面(手动触发接口)

除此之外还有Linux下的crontab定时扫描程序

*/5 * * * * php /data/static/index.php

局部静态化内容不做叙述

   通过ajax进行局部动态数据的更新

PHP伪静态

// 静态:http://yourhost.com/index.php/12/2.html
// 动态:http://yourhost.com/index.php?type=12&id=2
$pathinfo = $_SERVER['PATH_INFO'];  /12/2.html
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服务,重启服务器生效
LoadModule rewrite_module modules/mod_rewrite.so

注释:http-vhosts.conf文件是虚拟域名配置的文件,开启该文件可以配置虚拟域名,一般默认是开启的.
include conf/extra/httpd-vhosts.conf

rewrite伪静态配置

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "c:/Apache24/docs/dummy-host.example.com"
    ServerName dummy-host.example.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/dummy-host.example.com-error.log"
    CustomLog "logs/dummy-host.example.com-access.log" common

    #配置规则如下所示
    RewriteEngine on
    RewriteRule ^/vidio/([0-9]*).html$ /vidio.php?id=$1
    
</VirtualHost>

RewriteEngine其他配置规则以后会再添加

现在你访问http://yourhost.com/vidio/12.html时,相当于访问了http://yourhost.com/vidio.php?id=12

问题:
配置完上面的内容后,又存在以下问题?如果项目目录下存在该静态页面时,到底是访问我们的静态页面还是访问我们伪静态的文件呢?

经过测试我们发现,并不会访问静态页面,如果我们想访问我们的静态页面怎么办?

伪静态和静态页面冲突时解决办法:

#完整的配置规则如下
    RewriteEngine on
    #添加以下两项,!-d  和  !-f  分别表示  目录 和 文件
    #当访问的伪静态和相应的静态目录和文件冲突时,访问静态页面
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
    RewriteRule ^/index/([0-9]*).html$ /index.php?id=$1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念 PHP静态化分为:纯静态化 和 伪静态化;纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP生...
    zshanjun阅读 685评论 0 1
  • 1、介绍 (1)缓存介绍 1)浏览器缓存: 是保存在浏览器端的缓存,这个缓存我们没有办法控制。在360等卫士的清理...
    宠辱不惊丶岁月静好阅读 483评论 0 1
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,056评论 2 89
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,824评论 1 45
  • 隔了一周,再次走入了瑜伽课堂。 还以为跟不上节奏,但是今天训练的是自己的强项,腰腹力量型。 第一式 做在地面上,双...
    乐之与后知阅读 210评论 0 0