我正在尝试以下示例,例如:
$ php -r 'require_once($argv[1]);' <(echo "hello")
或者:
$ php -r 'file_get_contents($argv[1]);' <(echo "hello")
两者都失败了:
PHP 警告:require_once(/dev/fd/63):无法打开流:第 1 行的命令行代码中没有此类文件或目录
PHP 警告:file_get_contents(/dev/fd/63):无法打开流:第 1 行的命令行代码中没有此类文件或目录
或者:
$ php -r 'file_get_contents($argv[0]);' < <(echo "hello")
失败了:
PHP 致命错误:require_once(): Failed opening required '-' (include_path='.:/usr/share/pear:/usr/share/php') in Command line code on line 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
或者:
$ python -c "import sys; print sys.stdin.readlines()" < <(echo "hello")
['hello\n']
我发现了这个PHP 错误和这个错误,但是很久以前就已经修复了,我使用的是 5.6.22。
当从 CLI 调用时,有什么方法可以欺骗 PHP 从进程替换中读取数据(例如,从文件描述符中读取/dev/fd
),通过使用一些简单的单线?