Maison  >  Article  >  développement back-end  >  La différence entre php://output et php://stdout

La différence entre php://output et php://stdout

藏色散人
藏色散人avant
2019-08-26 14:12:122313parcourir

PHP inclut une série de flux de sortie commençant par php://, tels que php://stdin, php://stdout, etc. Alors que je regardais le code aujourd'hui, une question m'est soudainement venue : quelle est la différence entre php://output et php://stdout ?

Trouvez la réponse dans la documentation officielle de PHP. Les explications des flux d'entrée php://stdin et php://input sont les suivantes (l'explication du flux de sortie est trop brève) :

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

Le document le fait. ne l'explique pas directement. La différence entre les deux peut être obtenue par une comparaison minutieuse :

1 Les deux sont des flux en lecture seule

2. Processus PHP, php:/ /input est utilisé pour lire les données originales du corps de la requête.

Avec ces informations, comment comprendre correctement la différence essentielle entre les deux ?

Suivez les invites de saisie du processus php://stdin, associez le processus d'exécution du processus PHP et combinez-le avec les différences dans SAPI, vous pouvez obtenir les principales différences entre les deux :

php://stdin est le flux d'entrée du processus PHP peut contenir des données pendant le cycle de vie d'exécution (comme une entrée interactive sous CLI

php://input est le flux d'entrée externe lorsque) ; PHP est exécuté. Généralement, les données ne peuvent être lues qu'une seule fois (voir l'implémentation de SAPI pour plus de détails).

De même, nous pouvons faire la différence entre php://stdout et php://output : php://stdout est le flux de sortie standard du processus PHP, et php://output est le flux renvoyé. flux de données de résultat.

Le code suivant est utilisé pour vérifier la 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;

fichier d'exécution de ligne de commande, le résultat est le suivant :

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

Requête côté navigateur, le résultat est le suivant :

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

in Sous la ligne de commande, le flux de sortie standard et le flux de sortie résultat du processus PHP sont dirigés vers le terminal et tous les messages sont imprimés. Côté navigateur, le flux de sortie du processus PHP est ignoré et seul le flux de données résultant est envoyé au serveur Web. Dans le même temps, les informations des appels d'impression et d'écho sont envoyées au flux de sortie des résultats en tant que résultats d'exécution, elles sont donc affichées normalement.

Enfin, je voudrais exprimer mon appréciation pour la simplicité et le caractère pratique des fonctions intégrées de PHP. Une fonction file_put_contents peut gérer l'opération d'écriture de flux. Le passage à Java nécessite beaucoup de code de flux/écrivain, et enregistre également le fastidieux fopen/fwrite/fclose de style C.

Tutoriel recommandé : Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer