Оказывается, что функция stream_get_meta_data()
предоставляет решение, когда вызывается на стандартном входе, результат:
array(9) {
["wrapper_type"]=>
string(3) "PHP"
["stream_type"]=>
string(5) "STDIO"
["mode"]=>
string(1) "r"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
["uri"]=>
string(11) "php://stdin"
["timed_out"]=>
bool(false)
["blocked"]=>
bool(true)
["eof"]=>
bool(false)
}
Таким образом, вы можете выполнить простое сравнение строк в uri:
function isSTDIN($stream) {
$meta = stream_get_meta_data($stream);
return strcmp($meta['uri'], 'php://stdin') == 0;
}
Это решение будет работать независимо от того, используется ли постоянный поток STDIO
или старый fopen('php://stdin', 'r')
, который все еще скрывается в старом коде.