使用 PHP shell_exec,以便输出"piped"而不是"dumped"



真的是一个快速问题。

考虑以下代码:

//__/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原样。

相关内容

  • 没有找到相关文章

最新更新