Я пробовал следующие примеры, такие как:
$ 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, используя какой-то простой однострочный?