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!