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