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 つの行が表示されます。つまり、1 秒に 1 つずつ、9 つの正の出力が得られます。EG: これらは一度に 1 つずつ到着し、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: 待って、待って、待って.. 何もない THEN DUMP:

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

これを試して:

$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 に答える