71 votes

entrée standard

Je sais que PHP est généralement utilisé pour le développement web, où il n'y est pas de l'entrée standard, mais PHP prétend être utilisable comme un langage de scripting général, si vous ne suivez funky web à base de conventions. Je sais que PHP imprime stdout (ou ce que vous voulez l'appeler) avec print et echo, ce qui est assez simple, mais je me demandais comment un script PHP peut obtenir l'entrée d' stdin (spécifiquement fgetc(), mais de toute fonction d'entrée est bonne), ou est-ce même possible?

95voto

Il est possible de lire les stdin en créant un descripteur de fichier à php://stdin et de le lire ensuite avec fgets() pour une ligne par exemple (ou indiqué, fgetc() pour un seul caractère):

 <?php
$f = fopen( 'php://stdin', 'r' );

while( $line = fgets( $f ) ) {
  echo $line;
}

fclose( $f );
?>
 

48voto

techtonik Points 2945

La lecture de STDIN est recommandée

 <?php
while (FALSE !== ($line = fgets(STDIN))) {
   echo $line;
}
?>
 

26voto

mjs Points 9378

Pour éviter de gâcher les poignées de fichiers, utilisez file_get_contents() et php://stdin :

 $ echo 'Hello, World!' | php -r 'echo file_get_contents("php://stdin");'
Hello, World!
 

(Si vous lisez une quantité vraiment énorme de données de stdin vous voudrez peut-être utiliser l'approche de traitement de fichier, mais cela devrait être bon pour plusieurs mégaoctets.)

18voto

Une méthode simple est

 $var = trim(fgets(STDIN));
 

8voto

Greg Points 132247

Vous pouvez utiliser fopen() sur php://stdin :

 $f = fopen('php://stdin', 'r');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X