Опитвам следните примери като:
$ php -r 'require_once($argv[1]);' <(echo "hello")
or:
$ php -r 'file_get_contents($argv[1]);' <(echo "hello")
и двете се провалят като:
PHP Предупреждение: require_once(/dev/fd/63): не успя да отвори поток: Няма такъв файл или директория в кода на командния ред на ред 1
PHP Предупреждение: file_get_contents(/dev/fd/63): не успя да отвори поток: Няма такъв файл или директория в кода на командния ред на ред 1
or:
$ php -r 'file_get_contents($argv[0]);' < <(echo "hello")
което се проваля с:
PHP Фатална грешка: require_once(): Неуспешно отваряне изисква '-' (include_path='.:/usr/share/pear:/usr/share/php') в кода на командния ред на ред 1
Горните опити са вдъхновени от командата drush
, например:
$ drush --early=<(echo print 123';') ""
[warning] require_once(/dev/fd/63): failed to open stream: No such file or directory preflight.inc:58
където бих могъл да инжектирам динамичния PHP код от файловия дескриптор (без да създавам отделен файл всеки път), за да изпълня кода, преди да заредя основния код.
Други подобни командни инструменти работят правилно:
$ cat <(echo "hello")
hello
or:
$ python -c "import sys; print sys.stdin.readlines()" < <(echo "hello")
['hello\n']
Открих този PHP грешка и този, но те са поправени отдавна и аз използвам 5.6.22.
Има ли някакъв начин, по който мога да подмами PHP да чете данни от заместването на процеса (за четене от файлов дескриптор, напр. /dev/fd
), когато се извиква от CLI, като използвам някакъв прост едноредов?