真的是一个快速问题。
考虑以下代码:
//__/var/test/cli_test.php__
$x = 0;
while ($x < 9){
print "loop " . str_pad($x, 3, "0", STR_PAD_LEFT) . "n";
sleep(1);
$x++;
}
如果我在命令行中键入php /var/test/cli_test.php
,我会得到9个时间线间隔。。即每秒一个的9个正输出。EG:这些一次一个到达,blip-blip-blip。。。
loop 000
loop 001
loop 002
loop 003
loop 004
loop 005
loop 006
loop 007
loop 008
现在考虑一个不同的命题
//__/var/test/cli_test_shell.php
print shell_exec("php /var/test/cli_test.php");
如果我在命令行中键入php /var/test/cli_test_shell.php
,我在9秒内一无所获,那么一切都会到来。。即1 BIG输出1 BIG等待。在9秒钟后什么都没有EG:等等,等等。。什么都没有然后倾倒:
loop 000
loop 001
loop 002
loop 003
loop 004
loop 005
loop 006
loop 007
loop 008
如何更改/var/test/cli_test_shell.php
,使输出每秒返回上的每一行
试试这个:
$handle = popen('php /var/test/cli_test_shell.php 2>&1', 'r');
while (!feof($handle)) {
echo fread($handle, 8192);
}
fclose($handle);
使用shell_exec()
无法实现所需的行为。这是因为函数收集命令的输出,并在命令终止后将其作为字符串返回。使用passthru()
并保持cli_test.php
原样。