允许exec()调用php写入控制台

时间:2011-07-15 06:36:43

标签: php

我通过exec()调用了一个php文件:

<?php
$cmd = "php -q nah.php";
exec($cmd);
echo "lalal";
?>

并且nah.php有这个:

<?php
echo "yaya";
sleep(3);
?>

它会休眠3秒但文件可以回显到该命令。 我如何回应来自nah.php的输出

3 个答案:

答案 0 :(得分:4)

如果要捕获其他进程的输出,则可以使用backticks

$output=`command line`;

或使用exec()

捕获它
exec('command line', $output);

但是,这两种技术仅在外部进程运行完成时才提供输出。如果您想要在输出时抓取输出,可以使用popen(或proc_open进行更多控制),例如像这样的东西

$handle = popen('command line 2>&1', 'r');
while (!feof($handle))
{
    $read = fread($handle, 2096);
    echo $read;
}
pclose($handle);

如果在bash之类的shell中运行,命令行末尾的2>&1是一个方便的习惯用法。它将stderr重定向到stdout,因此命令生成的任何错误都将返回给PHP。有更多高级方法可以捕获stderr,这只是简单易行。

答案 1 :(得分:3)

将您的第一个脚本更改为:

<?php
$cmd = "php -q nah.php";
echo `$cmd`;
echo "lalal";

答案 2 :(得分:1)

exec()创建一个新的控制台并在那里执行php文件,它返回一个数组中的输出(每行返回一个元素),作为第二个参数传入。因此,如果您将代码更改为:

<?php
$output = array();
$cmd = "php -q nah.php";
exec($cmd, $output);
$lines = count($output);
for($i = 0; $i < $lines; $i++)
  echo $output[$i];
echo "lalal";
?>