При использовании fgets может блокировать скрипты bash, если stdin
не установлен или не пуст, в том числе при использовании оператора контроля ошибок @
php .
#!/usr/bin/php
<?php
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// Fail to continue, php warning
Этого можно избежать, установив stream_set_blocking
в заголовке php:
#!/usr/bin/php
<?php
stream_set_blocking(STDIN, 0);
$pipe = @trim(fgets(STDIN));
// Script was called with an empty stdin
// No errors or warnings, continue
echo $pipe . "!";
Как пример, будет называться следующим образом:
echo "Hello world" | ./myPHPscript
// Output "Hello world!"
./myPHPscript
// Output "!"