页面静态化与伪静态


 一、页面静态化

1、页面静态化介绍

 说明

页面静态化就是将PHP查询的结果保存到一个静态的html文件中将来用户访问的时候直接访问该静态html文件即可

相对于页面缓存的比较:

缓存减轻了数据库的压力,但是服务器(php)压力依然存在

页面静态化之后:减轻了服务器、数据库的压力

 

 

使用页面静态化

查询比较频繁不经常更新的内容,可以使用页面静态化,例如新闻、文章

但是数据经常变化的评论天气情况股票等就不适合使用页面静态化

 

页面静态化使用什么技术实现呢

就使用ob缓冲、结合file_put_contents函数实现

 

2、ob缓冲介绍 

ob缓冲是服务器向客户端响应数据时存储响应数据的临时空间,

服务器在向客户端推送数据之前,不是一次性把所有的数据都给客户端,而是先pushob缓冲区域,再一点一点给客户端,减轻服务器的压力。

 

 

开启ob缓冲

php.ini配置文件中找到output buferring

 

ob缓冲相关函数

ob_start() 开辟一块新的缓冲区域

只要ob_start()一次就会在PHP的缓存中开辟一块缓冲区域

而且,服务器输出的内容会先输出到缓冲区域,再给客户端响应

ob_get_contents() 获取缓冲区域里面的内容

ob_get_length() 获取缓冲区域内容长度

ob_flush() 将缓冲区域的内容直接刷出\输出

ob_get_flush() 获得缓冲区域刷出的内容

ob_clean():清空缓冲区域的内容

ob_get_clean():获得清空的缓冲区域的内容

 

ob缓冲处理器

说明

ob缓冲处理器,就是在输出缓冲区域的内容之前,使用某个函数进行处理

通常我们会使用ob_gzhandler处理器进行压缩处理

 

ob多缓冲

 说明

我们可以在PHP里面开启多块缓冲区域ob_start()一次,就会在PHP里面创建一块缓冲区域,而且,将来ob_clean清空缓冲区域时,操作的是离开启缓冲最近那个缓冲区域

 

 

2、ob缓冲实现页面静态化

 说明

服务器响应给客户端的数据会先输出到缓冲区域

服务器向客户端响应数据的方式:echovar_dumprequireinclude

 

两步生产静态html

 (1)先将require_once加载的模板内容,保存到缓冲区域,再读取并输出到静态html文件

(2)使用file_put_contents函数生成html文件

 

注意:使用smarty是可通过fetch方法获取$content  (smarty封装了ob缓冲)

$content = $smarry->fetch('xxx.html')

 

二、伪静态

1、伪静态介绍

说明

页面静态化是真静态,因为生产静态的html文件,所谓的伪静态是假的静态,伪静态的效果是这个样子:http://localhost/app/xxxcontroller/add

访问的时候会进入控制器的add方法中,但是给用户的感觉是静态页面,实际上还是会动态解析即 index.php?c=xxxcontroller&a=addAction

,所以称之为伪静态。

 

伪静态的优点

(1) url地址简洁,方便用户记忆

(2) SEO(搜索引擎优化)(注:搜索引擎包括:百度、360搜索、搜狗、谷歌),比较友好

index.php?m=home&c=question&a=indexAction,会根据参数的不同进入到不同的页面(日历:y=2019&m=12&d=22),担心页面没有穷尽,当然现在搜索引擎技术不断进步(对动态网站内容专区也会越来越好)

使用伪静态的地址:question/index.html,看到网页的时候认为你是静态的网页多抓取。因此便于搜索引擎收录。

 

 

2、伪静态实现

(1) 借助PHP超全局数组变量:$_SERVER[‘PATH_INFO’]获得路径的信息,如果index.php后面有路径信息则返回,如果index.php后面没有路径信息,则提示未定义

 

 

(2)根据index.php后面的路径的信息,解析出对应的$_GET[‘m’]$_GET[‘c’]$_GET[‘a’]

伪静态地址基本类型:

情况1admin

解析到后台进入到默认的控制器默认方法中

情况2admin/question

解析到后台模块的question控制器默认的动作

情况3admin/question/add

解析到后台、question控制器的add方法

情况4admin/question/delete/id/2

解析到后台、question控制器、delete方法额外参数是id=2

 

解析规则:

先把.html.htm 这样的字符替换掉

字符串分割:explode()炸开,获得数组

根据炸开之后的数组的元素个数进行分类。

 

3、隐藏入口文件

说明

有的网站不想让用户看到网站采用什么语言开发、其次想让url地址更加简洁,所以通常直接访问网站,不需要携带index.php。

 

实现:

(1)直接通过修改apache的配置文件实现当访问的url地址指向的不是一个文件不是一个目录的时候将该url地址信息作为index.php后面的PATH_INFO进行处理。

(2)apache提供了一个分布式配置文件(.htaccess),分布式配置文件,只针对当前项目有效,对其他项目没有影响,而且不用重启apache服务器。

 

 

步骤

步骤1:首先要在apache的配置文件中开启重写模式(也就是允许使用分布式配置系统)

 

步骤2:在项目根目录创建.htaccess文件

 

<IfModule rewrite_module>
    #开启重写引擎
    RewriteEngine on
    #重写的条件(访问的url地址指向的不是文件、不是目录的时候,采用重写机制)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    
    #重写规则
    RewriteRule (.*) index.php/$1    
</IfModule>

#当访问的是一个目录时,会将如下文件作为默认的欢迎页面,会先显示index.html,如果没有则显示index.php
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM