Home  >  Article  >  Backend Development  >  Detailed explanation of the difference between php://output and php://stdout

Detailed explanation of the difference between php://output and php://stdout

php中世界最好的语言
php中世界最好的语言Original
2018-05-16 11:12:463041browse

This time I will bring you php://detailed explanation of the difference between the use of output and php://stdout, and notes on the use of php://output and php://stdoutWhat are they? Here are actual cases. Let’s take a look.

Find the answer from PHP's official documentation. The explanations of the input streams php://stdin and php://input are as follows (the explanation of the output stream is too brief):

php://stdin
php://stdin, php://stdout and php://stderr allow direct access to the corresponding input or output stream of the PHP process. The stream references a duplicate file descriptor, so if you open php://stdin and later close it, you close only your copy of the descriptor-the actual stream referenced by STDIN is unaffected. Note that PHP exhibited buggy behavior in this regard until PHP 5.2.1. It is recommended that you simply use the constants STDIN, STDOUT and STDERR instead of manually opening streams using these wrappers.
php://stdin is read-only, whereas php://stdout and php://stderr are write-only.
php://input
php://input is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to use php://input instead of $HTTP_RAW_POST_DATA as it does not depend on special php.ini directives. Moreover, for those cases where $HTTP_RAW_POST_DATA is not populated by default, it is a potentially less memory intensive alternative to activating always_populate_raw_post_data. php://input is not available with enctype=”multipart/form-data”.

The document does not directly explain the difference between the two. A careful comparison can lead to the following information: 1. Both are read-only streams; 2. php://stdin is the standard input of the PHP process, php://input Raw data used to read the request body. With this information, how can we correctly understand the essential differences between the two?

Follow the input prompts of the php://stdin process, associate the execution process of the PHP process, and combine it with the differences in SAPI, you can get the main difference between the two: php://stdin is the input stream of the PHP process. There may be data flowing in during execution Life cycle (such as interactive input under CLI); php://input is the external input stream when PHP is executed. Generally, data can only be read once (see SAPI for details) accomplish). In the same way, we can get the difference between php://stdout and php://output: php://stdout is the standard output stream of the PHP process, and php://output is the returned result data stream.

Use the code below to verify the conclusion:

// file: test.php
file_put_contents("php://output", "message sent by output" . PHP_EOL);
file_put_contents("php://stdout", "message sent by stdout" . PHP_EOL);
print("message sent by print" . PHP_EOL);
echo "SAPI:" , PHP_SAPI , PHP_EOL;

Command line execution file, the output is as follows:

message sent by output
message sent by stdout
message sent by print
SAPI:cli

Browser side request, the output is as follows:

message sent by output
message sent by print
SAPI:fpm-fcgi

In Under the command line, the standard output stream and result output stream of the PHP process are directed to the terminal, and all messages are printed. On the browser side, the output stream of the PHP process is ignored, and only the resulting data stream is sent to the web server. At the same time, the information of print and echo calls are sent to the result output stream as execution results, so they are displayed normally.

I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!

Recommended reading:

PHP calculates the integer set of extra large numbers

PHP ajax implementation to obtain news data case details

The above is the detailed content of Detailed explanation of the difference between php://output and php://stdout. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn