1
php缓存过程
在一个PHP请求过程中,实际上经过三个缓存:
1. 程序缓存
2. ob缓存
3. 浏览器缓存
开启ob的两个方法
1.在php.ini 配置中,
;output_buffering = 4096 这里去掉;即可
2 在php页面中使用 ob_start()
通过php.ini 打开的,则作用于所有的php页面 。
使用ob_start()打开则只作用于该页面
2
ob缓存的知识点
1、在服务中,如果我们开启了ob缓存,则echo出来的数据首先会放入到ob中。
2、当PHP页面执行到最后,则会把ob缓存的数据(如果有的话), 强制刷新到程序缓存,然后通过apache(服务器)对数据封装成http响应包,返回给浏览器。
3、如果没有ob,所有的数据直接放入程序缓存。
3
ob相关的函数
ob_start($callback)
//在当前页面中开启ob,注意callback
ob_start($callback);
复制代码
ob_get_contents()
//获取当前ob缓存中的内容
ob_get_contents()
复制代码
ob_get_clean()
//获取当前ob缓存中的内容,并且清空当前的ob缓存
ob_get_clean()
复制代码
ob_flush()
//将ob缓存中的内容,刷到程序缓存中,但并没有关闭ob缓存
ob_flush()
复制代码
ob_end_flush()
//关闭ob缓存,并将数据刷回到程序缓存中
ob_end_flush()
复制代码
ob_clean()
//将ob缓存中的内容清空
ob_clean()
复制代码
ob_end_clean()
//将ob缓存中的数据清空,并且关闭ob缓存
ob_end_clean()
复制代码
注意ob_start($callback)的回调
ob_start("callback_func");
function callback_func($str){
return "callback".$str;
}
echo "123";//输出:callback123
复制代码
4
应用场景
在header()发送之前的报错。
出错代码如下:
echo "before_header";
header("Content-type:text/html;charset=utf-8");
echo "after_header";
复制代码
输出:
Warning: Cannot modify header information - headers already sent by (output started at /Users/shuchao/Desktop/test.php:2) in /Users/shuchao/Desktop/test.php on line 3
复制代码
解决办法
在发送header前开启ob,则所有的echo内容都会到ob里面,从而解决错误。
ob_start();
echo "before_header\n";
header("Content-type:text/html;charset=utf-8");
echo "after_header\n";
复制代码
输出
before_header
after_header
复制代码
END
附一首打油诗:
奋力码字一月半,留言赞赏终开通。
心情畅然并激动,好好分享自他利。
留言开了好互动,赞赏来了是鼓励。
不知效果怎么样,诸君谁欲试一试?