将数据管道化到命令行 php 中?

2022-08-30 14:04:40

是否可以使用 unix 管道将数据管道传输到命令行 php 脚本中?我试过了

$> data | php script.php

但是预期的没有出现在.有没有办法做到这一点?data$argv


答案 1

PHP可以从标准输入中读取,并且还为它提供了一个很好的快捷方式:STDIN

有了它,您可以使用stream_get_contents等内容来执行以下操作:

$data = stream_get_contents(STDIN);

这只会将所有管道数据转储到 中。$data

如果要在读取所有数据之前开始处理,或者输入大小太大而无法放入变量中,则可以使用:

while(!feof(STDIN)){
    $line = fgets(STDIN);
}

STDIN只是 的捷径。相同的方法可以应用于读取和写入文件以及 tcp 流。$fh = fopen("php://stdin", "r");


答案 2

据我所知,将显示程序的参数,换句话说:$argv

php script.php arg1 arg2 arg3

但是,如果您通过管道将数据传输到PHP中,则必须从标准输入中读取它。我从来没有尝试过这个,但我认为它是这样的:

$fp = readfile("php://stdin");
// read $fp as if it were a file

推荐