Я знаю, что 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);