php缓存过程

在请求一个PHP的过程中,实际上经过三个缓存:

1.程序缓存

2.ob缓存

3.浏览器缓存.

开启ob的两个方法

1.在php.ini 配置 ;output_buffering = 4096 这里去掉;号即可

2 在php页面中使用 ob_start();

通过php.ini 打开的,则作用于所有的php页面 。使用ob_start()打开则只作用于该页面

ob缓存的知识点

在服务中,如果我们开启了ob缓存,则echo数据首先放入到ob中

当PHP页面执行到最后,则会把ob缓存的数据(如果有的话), 强制刷新到程序缓存,然后通过apache对数据封装成http响应包,返 回给浏览器

如果没有ob,所有的数据直接放入程序缓存。 header信息不管你是否开启ob,总是放入到程序缓存。

ob相关的函数

ob_start($callback)

//在当前页面中开启ob,注意callbackob_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)的回调

<?phpob_start("callback_func");function callback_func($str){    return "callback".$str;}echo "123";//输出:callback123

应用场景

在header()发送之前的报错

出错代码

<?phpecho "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里面,从而解决错误。

<?phpob_start();echo "before_header\n";header("Content-type:text/html;charset=utf-8");echo "after_header\n";

输出

before_headerafter_header

更多相关文章

  1. PHP 编写基本的 Socket 程序
  2. 解决PHP中Web程序中shell_exec()执行Shell脚本不成功问题
  3. 浅谈PHP程序员如何修炼?
  4. 程序员的快乐就是这么朴素无华且枯燥
  5. 做一个诚信的程序员有多难?
  6. 过年了,给亲朋好友解释「啥是程序员」
  7. 程序员的薪资是如何确定出来的?
  8. 5个有趣的程序员彩蛋
  9. 2018 年 Java 程序员必读的十本书

随机推荐

  1. Android Studio 错误 com.android.dex.De
  2. Android 获取网络时间
  3. 复选框
  4. Android 图片倒影效果源码
  5. android嵌入式底层开发
  6. 使用Android studio分析内存泄露
  7. The android SDK requaires Android Deve
  8. android调用cocos2dx例子
  9. android 设置边框圆角
  10. android IP