真的很快。
请考虑以下代码:
//__/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
以便输出每秒返回每行
答案 0 :(得分:1)
使用shell_exec()
无法实现所需的行为。这是因为该函数收集命令的输出并将其作为字符串返回 - 在命令终止后。请改用passthru()
并保持cli_test.php
原样。
答案 1 :(得分:1)
试试这个:
$handle = popen('php /var/test/cli_test_shell.php 2>&1', 'r');
while (!feof($handle)) {
echo fread($handle, 8192);
}
fclose($handle);