1

真的很快的问题。

考虑以下代码:

//__/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:这些一次到达一个,嘀嘀嘀嘀……

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,以便输出每秒返回每一行

4

2 回答 2

1

使用 无法实现所需的行为shell_exec()。这是因为该函数在命令终止后收集命令的输出并将其作为字符串返回。改为使用passthru()并保持cli_test.php原样。

于 2014-05-06T13:51:48.073 回答
1

尝试这个:

$handle = popen('php /var/test/cli_test_shell.php 2>&1', 'r');
while (!feof($handle)) {
  echo fread($handle, 8192);
}
fclose($handle);
于 2014-05-07T23:57:23.100 回答