Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erklärung des Unterschieds zwischen php://output und php://stdout

Detaillierte Erklärung des Unterschieds zwischen php://output und php://stdout

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

Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Unterschiede zwischen php://Ausgabe und php://stdout sowie Vorsichtsmaßnahmen für die Verwendung von php://Ausgabe und php://stdoutWas sind das? Hier sind echte Fälle. Die Antwort finden Sie in der offiziellen PHP-Dokumentation. Die Erklärungen zu den Eingabeströmen php://stdin und php://input sind wie folgt (die Erklärung des Ausgabestroms ist zu kurz):

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”.

Das Dokument erklärt den Unterschied zwischen den beiden nicht direkt. Ein sorgfältiger Vergleich kann zu folgenden Informationen führen: 1. Bei beiden handelt es sich um schreibgeschützte Streams. 2. php://stdin ist die Standardeingabe des PHP-Prozesses, php://input Rohdaten, die zum Lesen des Anforderungstexts verwendet werden. Wie können wir anhand dieser Informationen die wesentlichen Unterschiede zwischen den beiden richtig verstehen?

Folgen Sie den Eingabeaufforderungen des php://stdin-Prozesses, verknüpfen Sie den Ausführungsprozess des PHP-Prozesses und kombinieren Sie ihn mit den Unterschieden in SAPI. Sie können die Hauptunterschiede zwischen den beiden ermitteln: php:/ /stdin ist der Eingabestrom des PHP-Prozesses. Während des Ausführungslebenszyklus

können Daten einfließen (z. B. interaktive Eingabe unter CLI); Im Allgemeinen können Daten nur einmal gelesen werden (siehe SAPI für Details). Auf die gleiche Weise können wir den Unterschied zwischen php://stdout und php://output ermitteln: php://stdout ist der Standardausgabestrom des PHP-Prozesses und php://output ist der zurückgegebene Ergebnisdatenstrom .

Der folgende Code wird verwendet, um die Schlussfolgerung zu überprüfen:

// 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;

Befehlszeilenausführungsdatei, die Ausgabe ist wie folgt:

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

Browserseitige Anfrage, die Ausgabe ist wie folgt :

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

in Unter der Befehlszeile werden der Standardausgabestream und der Ergebnisausgabestream des PHP-Prozesses an das Terminal weitergeleitet und alle Nachrichten werden gedruckt. Auf der Browserseite wird der Ausgabestrom des PHP-Prozesses ignoriert und nur der resultierende Datenstrom an den Webserver gesendet. Gleichzeitig werden die Informationen von Druck- und Echoaufrufen als Ausführungsergebnisse an den Ergebnisausgabestream gesendet, sodass sie normal angezeigt werden.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

PHP berechnet die ganzzahlige Menge extra großer Zahlen


Detaillierte Erläuterung des Falles des Erhaltens von Nachrichten Daten mit PHP+Ajax

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des Unterschieds zwischen php://output und php://stdout. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn