一、ob缓存
ob的基本原则:如果ob缓存打开,则echo的数据首先放在ob缓存。如果是header信息,直接放在程序缓存。当页面执行到最后,会把ob缓存的数据放到程序缓存,然后依次返回给浏览器。
ob的基本作用:
1) 防止在浏览器有输出之后再使用setcookie()、header()或session_start()等发送头文件的函数造成的错误。其实这样的用法少用为好,养成良好的代码习惯。
2) 捕捉对一些不可获取的函数的输出,比如phpinfo()会输出一大堆的HTML,但是我们无法用一个变量例如$info=phpinfo();来捕捉,这时候ob就管用了。
3) 对输出的内容进行处理,例如进行gzip压缩,例如进行简繁转换,例如进行一些字符串替换。
4) 生成静态文件,其实就是捕捉整页的输出,然后存成文件。经常在生成HTML,或者整页缓存中使用。
1、开启
//此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。
ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] ) : bool
<?php
function callback($buffer)
{
// replace all the apples with oranges
return (str_replace("apples", "oranges", $buffer));
}
ob_start("callback");
?>
<html>
<body>
<p>It's like comparing apples to oranges.</p>
</body>
</html>
<?php
ob_end_flush();
?>
2、获取内容
//只是得到输出缓冲区的内容,但不清除它。
ob_get_contents ( void ) : string
//Level 0
ob_start();
echo "Hello ";
//Level 1
ob_start();
echo "Hello World";
$out2 = ob_get_contents();
ob_end_clean();
//Back to level 0
echo "Galaxy";
$out1 = ob_get_contents();
ob_end_clean();
//Just output
var_dump($out1, $out2);
//得到当前缓冲区的内容并删除当前输出缓冲区。
ob_get_clean ( void ) : string
//刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
ob_get_flush ( void ) : string
3、清空数据
//此函数用来丢弃输出缓冲区中的内容。
ob_clean ( void ) : void
//清空(擦除)缓冲区并关闭输出缓冲
ob_end_clean ( void ) : bool
4、刷新
//冲刷出(送出)输出缓冲区中的内容
ob_flush ( void ) : void
// 冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_flush ( void ) : bool
//刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区。
ob_get_flush ( void ) : string
5、关闭
// 冲刷出(送出)输出缓冲区内容并关闭缓冲
ob_end_flush ( void ) : bool
//清空(擦除)缓冲区并关闭输出缓冲
ob_end_clean ( void ) : bool
简单案例:
<?php
/**
* Created by PhpStorm.
* User: 25754
* Date: 2019/8/31
* Time: 9:46
*/
$file = "./index/index.html";
if (file_exists($file) && filemtime($file) + 10 > time()) {
echo "输出缓存内容";
include "./index/index.html";
} else {
//开启ob缓存
ob_start();
include "./tmp.html";
//获取缓冲区内容
$content = ob_get_contents();
file_put_contents("./index/index.html", $content);
//发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
ob_end_flush();
}
二、伪静态
1、利用web服务器提供的重写URL功能(例如Apache mod_rewrite)
2、利用PHP自身对URL进行分析处理。(pathinfo,就是PHP处理的)