2
<?php
  // Execute a shell script
  $dump = shell_exec('bigfile.sh'); // This script takes some 10s to complete execution
  print_r($dump); // Dump log to screen
?>

当上面的脚本从浏览器执行时,它会加载 10 秒,然后将脚本的输出转储到屏幕上。这当然是正常的。但是如果我想让shell脚本写入STDOUT的数据实时显示在屏幕上,有什么办法可以做到吗?

4

3 回答 3

2

如果需要,我会添加 proc_open(),它可以让您更好地控制命令执行,如果不需要,请尝试前面提到的 passthru() 或 popen()。

于 2010-04-08T15:30:18.463 回答
2

试试这个:

$handle = proc_open('bigfile.sh', array(0 => STDIN, 1 => STDOUT, 2 => STDERR), $pipes);
$status = proc_close($handle);

这对我很有效。

于 2011-12-30T12:28:52.103 回答
1

尝试passthru()popen()

代码将如下所示:

<?php 
        $fp=popen("bigfile.sh","r");
        while (!feof($fp)) { 
                $results = fgets($fp, 256); 
                echo $result; 
                flush(); 
        } 
?> 

正如@wik 下面建议的那样,您也可以尝试 proc_open 而不是 popen 它应该以类似的方式工作。

于 2010-04-08T14:27:02.990 回答