Home  >  Article  >  Backend Development  >  Principles and applications of output buffering in PHP

Principles and applications of output buffering in PHP

藏色散人
藏色散人forward
2019-10-22 13:43:071928browse

php caching process

In the process of requesting a PHP, there are actually three caches:

1. Program cache

2 .ob cache

3. Browser cache.

Two methods to open ob

1. Configure in php.ini; output_buffering = 4096 Just remove the ; sign here

2 Use ob_start() in the php page;

If opened through php.ini, it will apply to all php pages. Opening with ob_start() only affects the page

Knowledge points of ob cache

In the service, if we enable ob cache, the echo data is first put Enter ob

When the PHP page is executed to the end, the ob cached data (if any) will be forcibly refreshed to the program cache, and then the data will be encapsulated into an http response package through apache and returned to Browser

If there is no ob, all data will be directly put into the program cache. The header information is always put into the program cache regardless of whether you enable ob.

ob related functions

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()

Note ob_start($callback) Callback

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

Application scenarios

Error reporting before header() is sent

Error code

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

Output:

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

Solution

Enable ob before sending the header, then all the echo content will go to ob, thus solving the error.

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

Output

before_header
after_header

The above is the detailed content of Principles and applications of output buffering in PHP. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete