PHP DevPHP学习首页投稿(暂停使用,暂停投稿)

php页面静态化实现方案

2017-01-09  本文已影响358人  Stone_Zhuo

对内容不经常变化的面向用户的页面进行静态化处理可以显著提升页面的响应速度,同时还可以减少对服务器系统资源的占用并降低数据库服务器的压力。在php项目中如何实现页面静态化呢?

实现原理

通过对页面内容的缓存来取代数据库查询和数据处理。

实现步骤

示例代码

/**
 * 以下代码放置于脚本逻辑开始之前。
 * 这段代码包含的配置信息如$page_static_config可能是从配置文件中读取的。
 * 代码中的$url_info数组元素的具体值可能是通过程序去获取的而不是写死,以此可以提高代码的可移植性和复用度。
 */

$page_static_config = [ // 页面静态化配置
    'cache_ext' => '.html', // 缓存文件后缀
    'cache_time' => 21600, // 缓存保留时间
    'cache_folder' => '../tmp/cache/static/' // 静态文件放置的文件夹
];
$url_info = [ // 页面地址参数
    'host' => $_SERVER['HTTP_HOST'],
    'constroller' => 'index',
    'action' => 'index',
    'param' => '/12/34'
];
$this_url = 'http://'.$url_info['host'].'/'.$url_info['controller'].'/'.$url_info['action'].$url_info['param']; // 唯一标识当前访问的地址
$cache_file = $page_static_config['cache_folder'].md5($this_url).$page_static_config['cache_ext']; // 缓存文件名
if (file_exists($cache_file) && time() - $page_static_config['cache_time'] < filemtime($cache_file)) { // 缓存文件存在并且没有过期
    ob_start('ob_gzhandler'); // 打开输出控制缓冲,参数`ob_gzhandler`是一个回调函数,用来压缩输出缓冲区中的内容。
    readfile($cache_file); // 读取缓存的静态文件内容并写入输出缓冲。
    ob_end_flush(); // 送出输出缓冲区内容并关闭缓冲。
    exit;
}
// 当缓存静态文件不存在时需要进行正常的数据查询和整理并渲染页面,同时将页面内容保存为缓存文件以实现页面静态化。
ob_start('ob_gzhandler');
$this->set('page_static_config', $page_static_config);
$this->set('cache_file', $cache_file);
/**
 * 以下代码放置于所有代码之后,可以简单理解为放在</html>标签之后。
 * 所有要发送给浏览器并要缓存的内容都在此段代码之前已经送出到输出缓冲区。
 */

if (isset($cache_file)) { // 判断是否存在缓存文件的变量定义,这样这段代码可以放在公用代码段中,在被引用的页面判断是否有页面静态化的需要。
    if (!is_dir($page_static_config['cache_folder'])) { // 判断缓存文件夹是否存在,不存在则需要创建。
        mkdir($page_static_config['cache_folder']);
    }
    $file_handler = fopen($cache_file, 'w'); // 以可写的方式打开缓存文件。
    fwrite($file_handler, ob_get_contents()); // 获取输出缓冲区的内容并写入缓存文件。
    fclose($file_handler); // 关闭被打开的文件资源句柄。
    ob_end_flush(); // 送出输出缓冲区内容并关闭缓冲。
}

补充说明

本文首发于公众号:programmer_cc,转载请注明出处。


微信公众号.jpg
上一篇下一篇

猜你喜欢

热点阅读