Как заставить один PHP-скрипт запускать другой и записывать его вывод? - PullRequest
4 голосов
/ 17 апреля 2010

Это немного сложно, так что терпите меня:

  • У меня есть PHP-скрипт a.php, который запускается из командной строки, и данные передаются ему через STDIN
  • У меня есть другой скрипт PHP b.php
  • Я хочу, чтобы a.php запустил b.php и захватил его вывод .
  • Кроме того, a.php должен переслать STDIN на b.php

Есть ли простой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2010

Чтобы просто захватить стандартный вывод другой программы (php или нет), вы можете использовать обратные ссылки: http://php.net/manual/en/language.operators.execution.php. Например:

$boutput = `php b.php`;

Чтобы захватить стандартный ввод, сделайте следующее:

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

Наконец, чтобы передать содержимое строки во внешнюю программу, используйте proc_open , как следует из ответа Джереми. В частности, вот что должен содержать ваш 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);
1 голос
/ 17 апреля 2010

proc_open() должен дать вам уровень контроля, необходимый для этого.

...