1.下面我说说ob的基本作用:
1)防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
2)捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
3)对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
4)生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
-
静态化的实现方式
利用ob系列的函数
ob_start(); 打开输出控制缓冲 ob_get_contents(); 返回输出缓冲区内容 ob_clean(); 清空输出缓冲区 ob_end_flush(); 冲刷出(送出)输出缓冲区内容并关闭缓冲 ob_start(); 输出到页面的HTML代码.... ...... ob_get_contents(); ob_end_flush(); fopen()写入
3.利用ob系列的函数
可以判断文件的inode修改时间,判断是否过期
使用filectime函数
<?php
$id = $_GET['id'];
if (empty($id)) {
$id = '';
}
$cache_name = md5(__FILE__). '-' .$id. '.html';
$cache_lifetime = 3600;
//filectime(__FILE__)> filectime($cache_name) 判断文件是否已经修改
if ( filectime(__FILE__)> filectime($cache_name) && file_exists($cache_name) &&( filectime($cache_name) + $cache_lifetime > time())) {
include $cache_name;
exit;
}
ob_start();
?>
<b>This is My Script</b>
<?php
$content = ob_get_contents();
ob_end_flush();
$handle = fopen($cache_name, "w');
fwrite($handle, $content);
fclose($handle);
?>