【发布时间】:2010-04-17 04:16:48
【问题描述】:
这有点棘手,所以请耐心等待:
- 我有一个 PHP 脚本
a.php从命令行启动,数据通过STDIN提供给它 - 我有另一个 PHP 脚本
b.php - 我想让
a.php启动b.php并捕获它的输出。 - 另外,
a.php必须将STDIN转发到b.php
有没有简单的方法可以做到这一点?
【问题讨论】:
这有点棘手,所以请耐心等待:
a.php 从命令行启动,数据通过 STDIN 提供给它
b.php
a.php 启动b.php 并捕获它的输出。a.php 必须将STDIN 转发到b.php
有没有简单的方法可以做到这一点?
【问题讨论】:
如果只是捕获另一个程序的标准输出(php 与否),您可以使用反引号: http://php.net/manual/en/language.operators.execution.php。 例如:
$boutput = `php b.php`;
要捕获标准输入,请执行以下操作:
$ainput = file_get_contents('php://stdin');
最后,要将字符串的内容通过管道传输到外部程序,请使用 proc_open,正如 jeremy 的回答所建议的那样。 具体来说,这是您的 a.php 应包含的内容:
$ainput = file_get_contents('php://stdin');
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open('php b.php', $descriptorspec, $pipes);
fwrite($pipes[0], $ainput);
fclose($pipes[0]);
echo stream_get_contents($pipes[1]); # echo output of "b.php < stdin-from-a.php"
fclose($pipes[1]);
proc_close($process);
【讨论】:
B.php在从A.php调用时通过STDIN接受命令?从这一点开始包含,并将输出包装在 ob_start 和 ob_get_flush 命令周围不是更好吗?
'php b.php' 传递给fopen。
proc_open 在我的服务器上被禁用了......哦,亲爱的......现在怎么办?
proc_open() 应该为您提供执行此操作所需的控制级别。
【讨论】: