开发者

How to have one PHP script launch another and capture its output?

This is a开发者_如何学JAVA little tricky so bear with me:

  • I have a PHP script a.php that is launched from the command line and data is provided to it via STDIN
  • I have another PHP script b.php
  • I want to have a.php launch b.php and capture its output.
  • Also, a.php has to forward the STDIN to b.php

Is there an easy way to do this?


For just capturing the stdout of another program (php or not), you can use backticks: http://php.net/manual/en/language.operators.execution.php. For example:

$boutput = `php b.php`;

To capture stdin, do this:

$ainput = file_get_contents('php://stdin');

Finally, to pipe the contents of a string to an external program, use proc_open, as suggested by jeremy's answer. Specifically, here's what your a.php should contain:

$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);


proc_open() should give you the level of control you need to do this.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜