Heim  >  Artikel  >  Backend-Entwicklung  >  Der Unterschied zwischen php://output und php://stdout

Der Unterschied zwischen php://output und php://stdout

藏色散人
藏色散人nach vorne
2019-08-26 14:12:122392Durchsuche

PHP enthält eine Reihe von Ausgabestreams, die mit php:// beginnen, wie php://stdin, php://stdout usw. Als ich mir heute den Code ansah, kam mir plötzlich eine Frage: Was ist der Unterschied zwischen php://output und php://stdout?

Die Antwort finden Sie in der offiziellen PHP-Dokumentation. Die Erklärungen zu den Eingabeströmen php://stdin und php://input lauten 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 tut es nicht direkt erklären Der Unterschied zwischen den beiden kann durch sorgfältigen Vergleich ermittelt werden:

1 Beide sind schreibgeschützte Streams

2 php://stdin ist die Standardeingabe PHP-Prozess, php:/ /input wird verwendet, um die Originaldaten des Anfragetextes zu lesen.

Wie können wir mit diesen Informationen den wesentlichen Unterschied zwischen den beiden richtig verstehen?

Befolgen Sie die 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 kann während des Ausführungslebenszyklus einfließen (z. B. interaktive Eingabe unter CLI);

php://input ist der externe Eingabestrom, wenn PHP wird im Allgemeinen nur einmal ausgeführt (Einzelheiten finden Sie in der Implementierung von SAPI).

Ähnlich können wir den Unterschied zwischen php://stdout und php://output ermitteln: php://stdout ist der Standardausgabestream des PHP-Prozesses und php://output ist der zurückgegebene Stream 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.

Abschließend möchte ich meine Wertschätzung für die Einfachheit und Praktikabilität der in PHP integrierten Funktionen zum Ausdruck bringen. Eine file_put_contents-Funktion kann den Stream-Schreibvorgang bewältigen und erfordert viel Stream-/Writer-Code erspart auch das umständliche fopen/fwrite/fclose im C-Stil.

Empfohlenes Tutorial: PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen php://output und php://stdout. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen