


Detailed introduction to output_buffering in PHP, outputbuffering_PHP tutorial
Detailed introduction to output_buffering in PHP, outputbuffering
I personally think that Output buffering is a relatively pure 4.0 feature. Although conceptually quite simple, output buffering is extremely powerful and makes it easier for developers to develop advanced and efficient programs.
This article will introduce HTTP headers, how output buffering can help you deal with HTTP headers, and introduce some advanced uses of output buffering.
HTTP Header
For every request established using the HTTP protocol, the response generated by the web server usually consists of two parts - headers and body. For example, if there is a small text file called example.txt in the document root directory of the web server, and the file contains the text Hello, world!, then the HTTP request response to this file will look like this:
HTTP/1.1 200 OK
Date: Sat, 02 Sep 2000 21:40:08 GMT
Server: Apache/1.3.11 (Unix) mod_macro/1.1.1 PHP/4.0.2-dev
Last-Modified: Sat, 02 Sep 2000 21:39:49 GMT
ETag: "12600b-e-39b173a5"
Accept-Ranges: bytes
Content-Length: 14
Connection: close
Content-Type: text/plain
Hello, world!
The first part (the larger part) of this request is the HTTP header. Although the HTTP header is not visible to the user in the browser, it contains information for the browser, such as the document content type, the protocol version used, the date the document was last modified, and so on. There are not many rules for HTTP headers. Usually, its format is as follows:
Field: Value[field: value]
They must be separated from the main body of the document by a blank line.
This HTTP header's information can be added or changed from a PHP script. For example, you can use the header() function:
header("Location: http://www.php.net/"); // Redirect to http://www.php.net/
You can also use the SetCookie() function:
SetCookie("foo", "bar");
You may know that HTTP cookies are implemented using HTTP headers. For example, the HTTP request response for the following PHP file
SetCookie("foo", "bar");
print "Set cookie.";
?>
It will look like this:
HTTP/1.1 200 OK
Date: Sat, 02 Sep 2000 21:43:02 GMT
Server: Apache/1.3.11 (Unix) mod_macro/1.1.1PHP/4.0.2-dev
X-Powered-By: PHP/4.0.2-dev
Set-Cookie: foo=bar
Connection: close
Content-Type: text/html
Set cookie.
The browser reads the HTTP header returned from the server and knows that a cookie called foo (a session cookie in this case) was sent, and its value is bar.
Why use Output Buffering technology
The need for output buffering technology was obvious as early as PHP/FI 2.0. If you have used this version of PHP, you may still remember that you often encountered the Oops, SetCookie called after header has been sent error message, which made you scratch your head and wonder what the reason was.
If you have used the latest version of PHP -- PHP 3.0 or even PHP 4.0 -- then you will know this error message: Oops, php_set_cookie called after header has been sent. Alternatively, you may encounter the Cannot add header information - headers already sent message when trying to call PHP's header() function. In general, output buffering technology users avoid these annoying error messages, while developers can also use it for advanced purposes.
When did these errors occur? These error messages can occur if you try to add or modify header information after the HTTP header has been sent, and if there is a lack of blank lines between the document body and the header. To understand how this happens, let's take a look at how PHP handles HTTP header output and body output.
When the script starts executing, it can send header information and body information at the same time.
Header information (from header() or SetCookie() function) is not sent immediately, instead, it is saved to a list.
This allows you to modify the header information, including the default header (such as the Content-Type header). However, once the script sends any non-header output (for example, using a block or a print() call), then PHP must send all the headers first, then send a blank line, terminating the HTTP header, and only continue after that. Send body data. From this point on, any attempt to add or modify header information is not allowed and will send one of the above error messages.
Although this does not cause much of a problem, sometimes it just terminates the HTTP header before sending any input, thus complicating the script logic. Output buffering technology can solve these problems.
How Output Buffering works
When output buffering is enabled, PHP does not send HTTP headers when the script sends output. Instead, it pipes this output into a dynamically growing cache (only available in PHP 4.0, which has a centralized output mechanism). You can still modify, add header rows, or set cookies, since the headers are not actually sent. In the simplest case, when the script terminates, PHP will automatically send the HTTP header to the browser, and then send the contents of the output buffer. It's simple.
Basic usage
You can use the following four functions, which can help you control output buffering:
ob_start()
Enable output buffering mechanism.
Output buffering supports multiple levels - for example, the ob_start() function can be called multiple times.
ob_end_flush()
Send output buffer and disable output buffering mechanism.
ob_end_clean()
Clear the output buffer without sending, and disable output buffering.
ob_get_contents()
Return the current output buffer into a string. Allows you to process any output emitted by the script.
Also, the output_buffering directive in php.ini can be enabled. If this directive is enabled, each PHP script is equivalent to calling the ob_start() function at the beginning.
Example 1
Example 1
print "Hello, $user ";
SetCookie("Wow", "This cookie has been set even though we've already emitted output!");
?>
Here, even though you have sent the output (in the HTML code block and in the print statement), you can still use the SetCookie() call without error, really thanks to the output buffering mechanism. Please note that using the output buffering mechanism for this purpose will incur a certain performance penalty, so it is best not to enable this mechanism by default. However, for more complex scripts, output buffering can simplify the logic.
Example 2
ob_start();
print "Here's a pretty dumb way to calculate the length of a string.";
$length = strlen(ob_get_buffer());
ob_end_clean();
?>
This example shows an inefficient method of determining string length. Instead of simply using the strlen() function, it first enables the output buffering mechanism, prints out the string, and then determines the length of the output buffer. Finally clear the output buffer (not send), and then disable the output buffering mechanism.
The following settings related to output buffering can be set in PHP.INI:
Name default value scope correction record
output_buffering "0" PHP_INI_PERDIR
output_handler NULL PHP_INI_PERDIR available since PHP 4.0.4
implicit_flush "0" PHP_INI_ALL in PHP
The simple explanation is as follows:
output_buffering boolean/integer
When this option is set to On, it will be used in all scripts Use output controls. If you want to limit the maximum size of the output buffer, set this option to a specified maximum number of bytes (for example, output_buffering=4096). Starting with PHP version 4.3.5, this option is always Off under PHP-CLI.
output_handler string
This option can redirect all output of the script to a function. For example, when output_handler is set to mb_output_handler(), the character's encoding will be modified to the specified encoding. Any processing functions set will automatically handle output buffering.
Note: You cannot use mb_output_handler() and ob_iconv_handler() at the same time, nor can you use ob_gzhandler() and zlib.output_compression at the same time.
Note: Only built-in functions can use this command. For user-defined functions, use ob_start().
implicit_flush boolean
Defaults to FALSE. If you change this option to TRUE, PHP will cause the output layer to automatically refresh after each chunk of information is output. This is equivalent to calling the flush() function in PHP after every use of functions such as print(), echo(), or after every HTML block.
When not using PHP in a web environment, turning this option on has a serious impact on the performance of program execution. It is usually only recommended for debugging. In execution mode of the CLI SAPI, this flag defaults to TRUE.
See ob_implicit_flush().
It will definitely be useful if set, unless the PHP.INI location you modify is not the one used by the system, for example, it is usually C::\WINDOWS\PHP.INI. Of course, it can be set to other places. In addition, console programs are not buffered.
In addition, you can also control the output buffer in the program. Please refer to the "CXIV. Output Control Output Control Function" chapter in the manual. The main functions are as follows:
flush -- Flush the output buffer
ob_clean -- Clean (erase) the output buffer
ob_end_clean -- Clean (erase) the output buffer and turn off output buffering
ob_end_flush -- Flush (send) the output buffer and turn off output buffering
ob_flush -- Flush (send) the output buffer
ob_get_clean -- Get current buffer contents and delete current output buffer
ob_get_contents -- Return the contents of the output buffer
ob_get_flu... ...The rest of the text>>
No impact.
This only controls the output of page content. When it is turned on, the page content is first saved in the buffer. After the page is executed, it is sent to the browser for display. When it is closed, the page content is sent directly to the browser for display.
This option also allows a numerical value, such as 4096, which means that content is sent to the browser once when the buffer content reaches 4096 bytes (or execution is completed).

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP is widely used in e-commerce, content management systems and API development. 1) E-commerce: used for shopping cart function and payment processing. 2) Content management system: used for dynamic content generation and user management. 3) API development: used for RESTful API development and API security. Through performance optimization and best practices, the efficiency and maintainability of PHP applications are improved.

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP and Python have their own advantages and disadvantages, and the choice depends on project needs and personal preferences. 1.PHP is suitable for rapid development and maintenance of large-scale web applications. 2. Python dominates the field of data science and machine learning.
