您的位置: 首页 - 站长

PHP实现页面静态化——全部纯静态化

PHP实现页面静态化——全部纯静态化

 先来看看php在服务器的执行过程:当用户请求服务器php文件的时候,服务器将对php文件进行语法分析,其次是解析,最后才运行。当php文件有内容输出时,该内容会先经过服务器的php的缓冲区(buffer),然后再通过TCP传递到客户端。(buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据区域)

       可见,如果用户直接访问静态页面的时候,服务器的响应时间一般会比访问动态文件的时间短。如果我们能把用户将要访问的动态文件先转化为静态文件即可加快用户访问页面的速度(获取网页的速度)。当然我们要注意静态化的应用场景,页面的静态化主要应用于那些页面内容不经常改动的页面。

       关于静态化,PHP的静态化分为:纯静态和伪静态。其中纯静态又分为:局部纯静态和全部纯静态。这里将的是全部纯静态。

       这里先介绍几个关于PHP缓冲区的相关函数:

ob_start     打开输出控制缓冲(要求php开启缓存,在php配置文件php.ini文件中可以设置 output_buffering = on)

ob_get_contents     返回输出缓冲区内容

ob_clean     清空(擦掉)输出缓冲区

ob_get_clean     得到当前缓冲区的内容并删除当前输出缓冲区

       php生成文件的函数 file_put_contents(‘文件路径’,‘文件内容’)。(当然php中还有其他写文件的方法,如fwrite)

下面有个demo01的案例,目录结构为:

       我们先来创建一个 mooc_cms 数据库,创建表 news,如下:

       并且插入多条数据,如下:

       创建一个数据库的操作类 db.php

<?php 

/

  数据库连接封装

 /

class Db {

//存储类的实例的静态成员变量

private static \(_instance;</p><p> //数据库链接静态变量</p><p> private static \)_connectSource;

//连接数据库配置

private $_dbConfig = array(

‘host’ =&gt; ‘127.0.0.1’,

‘user’ =&gt; ‘root’,

‘password’ =&gt; ‘’,

‘database’ =&gt; ‘mooc_cms’

);

 

private function __construct() {

 

}

 

/

  实例化

 /

public static function getInstance() {

//判断是否被实例化

if(!(self::\(_instance instanceof self)) {</p><p> self::\)_instance = new self();

}

return self::\(_instance;</p><p> }</p><p> </p><p> /**</p><p>  * 数据库连接</p><p>  */</p><p> public function connect() {</p><p> if(!self::\)_connectSource) {

//数据库连接

// @ 符号可以取消警告提示

self::\(_connectSource = @mysql_connect(\)this-&gt;_dbConfig[‘host’],\(this-&gt;_dbConfig[&#39;user&#39;],\)this-&gt;_dbConfig[‘password’]);

 

if(!self::\(_connectSource) {</p><p> //抛出异常处理</p><p> throw new Exception(&#39;mysql connect error &#39;);</p><p> }</p><p> //选择一款数据库</p><p> mysql_select_db(\)this-&gt;_dbConfig[‘database’], self::\(_connectSource);</p><p> //设置字符编码</p><p> mysql_query(&#34;set names UTF8&#34;, self::\)_connectSource);

}

 

//返回资源链接

return self::\(_connectSource;</p><p> }</p><p> }</p><p>?&gt;</p><p>       index.php (根据静态文件失效的时间,判断是否重新生成静态文件 index.shtml)</p><p>&lt;?php </p><p> //1、连接数据库,然后从数据库里面获取数据</p><p> //2、把获取到的数据填充到模板文件里面</p><p> //3、需要把动态的页面转化为静态页面,生成纯静态化文件</p><p> if(is_file(&#39;index.shtml&#39;) &amp;&amp; (time() - filemtime(&#39;index.shtml&#39;)) &lt; 300) { //设置缓存失效时间</p><p> require_once(&#39;index.shtml&#39;);</p><p> } else {</p><p> require_once(&#39;db.php&#39;);</p><p> </p><p> \)connect = Db::getInstance()-&gt;connect();

\(sql = &#34;SELECT * FROM news WHERE `category_id` = 1 AND `status` = 1 ORDER BY id DESC LIMIT 5&#34;;</p><p> \)result = mysql_query(\(sql, \)connect);

\(news = array();</p><p> while(\)row = mysql_fetch_array(\(result)) {</p><p> \)news[] = \(row;</p><p> }</p><p> //print_r(\)news);

ob_start(); //开启缓存区

 

//引入模板文件

require_once(‘templates/singwa.php’); //动态文件    singwa.php界面同样进过缓冲区

file_put_contents(‘index.shtml’, ob_get_contents());

/if(file_put_contents(‘index.shtml’, ob_get_clean())) {

echo ‘success’;

} else {

echo ‘error’;

}/

}

?&gt;

       singwa.php(使用bootstrap框架做界面)

新闻中心

新闻列表

&lt;?php foreach (\(news as \)key =&gt; $value) { ?&gt;