Стандартный ввод PHP?

Я знаю, что PHP обычно используется для веб-разработки, где нет стандартного ввода, но PHP утверждает, что он может использоваться в качестве языка сценариев общего назначения, если вы следуете его навязчивым веб-соглашениям. Я знаю, что PHP печатает на stdout (или на все, что вы хотите назвать) с помощью print и echo , что достаточно просто, но мне интересно, как PHP-скрипт может получить вход от stdin (в частности, с помощью fgetc() , но любой вход функция хороша), или это даже возможно?

Можно прочитать stdin , создав дескриптор файла для php://stdin а затем прочитайте его с помощью fgets() для строки, например (или, как вы уже сказали, fgetc() для одного символа):

 <?php $f = fopen( 'php://stdin', 'r' ); while( $line = fgets( $f ) ) { echo $line; } fclose( $f ); ?> 

Чтение из STDIN рекомендуется

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

Чтобы не путаться с файловыми дескрипторами, используйте file_get_contents() и php://stdin :

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

(Если вы читаете действительно огромный объем данных из stdin вы можете использовать подход filehandle, но это должно быть хорошо для многих мегабайт.)

Простым методом является

 $var = trim(fgets(STDIN)); 

Вы можете использовать fopen() для php://stdin :

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

IIRC, вы также можете использовать следующее:

 $in = fopen(STDIN, "r"); $out = fopen(STDOUT, "w"); 

Технически то же самое, но немного чище синтаксиса.

Захватите все это одним выстрелом:

 $contents = file_get_contents("php://stdin"); echo $contents; 

Это также работает:

 $data = stream_get_contents(STDIN);