use*_*841 21 php command-line pipe
可以使用unix管道将数据传输到命令行php脚本中吗?我试过了
$> data | php script.php
Run Code Online (Sandbox Code Playgroud)
但预期data没有出现在$argv.有没有办法做到这一点?
小智 36
PHP可以从标准输入读取,也为它提供了一个很好的快捷方式:STDIN.
有了它,你可以做以下事情:
$data = stream_get_contents(STDIN);
Run Code Online (Sandbox Code Playgroud)
这只会将所有管道数据转储到$ data中.
如果要在读取所有数据之前开始处理,或者输入大小太大而无法放入变量,则可以使用:
while(!feof(STDIN)){
$line = fgets(STDIN);
}
Run Code Online (Sandbox Code Playgroud)
STDIN只是$ fh = fopen("php:// stdin","r")的快捷方式; 可以将相同的方法应用于读取和写入文件以及tcp流.
Gus*_*son 21
据我了解,$argv将显示该程序的参数,换句话说:
php script.php arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)
但是如果将数据传输到PHP中,则必须从标准输入中读取它.我从来没有试过这个,但我认为它是这样的:
$fp = readfile("php://stdin");
// read $fp as if it were a file
Run Code Online (Sandbox Code Playgroud)
小智 17
如果你data是一个喜欢的,你也可以使用-F或-R标志(-F读取并执行它后面的文件,-R按字面顺序执行)如果你使用这些标志,那么管道输入的字符串将会出现在(常规)全局变量$ argn中
简单的例子:
echo "hello world" | php -R 'echo str_replace("world","stackoverflow", $argn);'
Run Code Online (Sandbox Code Playgroud)