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

Analyser la différence entre php://output et php://stdout

不言
不言original
2018-05-07 09:27:171542parcourir

Cet article vous propose une analyse détaillée des différences d'utilisation entre php://output et php://stdout ainsi que des exemples de partage de code. Les amis dans le besoin peuvent s'y référer.

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 et php://stderr permettent un accès direct au flux d'entrée ou de sortie correspondant du processus PHP. fait référence à un descripteur de fichier en double, donc si vous ouvrez php://stdin et le fermez plus tard, vous fermez uniquement votre copie du descripteur - le flux réel référencé par STDIN n'est pas affecté. Notez que PHP présentait un comportement bogué à cet égard jusqu'à PHP 5.2. .1. Il est recommandé d'utiliser simplement les constantes STDIN, STDOUT et STDERR au lieu d'ouvrir manuellement les flux à l'aide de ces wrappers.

php://stdin est en lecture seule, alors que php://stdout et php ://stderr sont en écriture seule.

php://input

php://input est un flux en lecture seule qui vous permet de lire les données brutes du corps de la requête In. dans le cas des requêtes POST, il est préférable d'utiliser php://input au lieu de $HTTP_RAW_POST_DATA car cela ne dépend pas de directives spéciales php.ini. De plus, dans les cas où $HTTP_RAW_POST_DATA n'est pas renseigné par défaut, c'est potentiellement un problème. alternative moins gourmande en mémoire que l'activation de always_populate_raw_post_data. php://input n'est pas disponible avec enctype="multipart/form-data".

Le document n'explique pas directement la différence entre les deux. la comparaison peut donner les informations suivantes : 1. Les deux sont des flux en lecture seule ; 2. php://stdin est l'entrée standard du processus PHP, et php://input est utilisé pour lire les données originales du corps de la requête. Avec ces informations, comment comprendre correctement les différences essentielles 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. Les données peuvent entrer pendant le cycle de vie d'exécution (comme l'entrée interactive sous CLI) ; php://input est le flux d'entrée externe lorsque PHP est exécuté. lire une fois (voir l'implémentation de SAPI pour plus de détails). De la même manière, 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 de données de résultat renvoyé. .

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;

Le 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

Sous la ligne de commande, le standard du processus PHP. Le flux de sortie et le flux de sortie du résultat 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.


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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn