我通过exec()调用了一个php文件:
<?php
$cmd = "php -q nah.php";
exec($cmd);
echo "lalal";
?>
并且nah.php有这个:
<?php
echo "yaya";
sleep(3);
?>
它会休眠3秒但文件可以回显到该命令。 我如何回应来自nah.php的输出
答案 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";
?>