PHP 中的 shell_exec()

Posted

技术标签:

【中文标题】PHP 中的 shell_exec()【英文标题】:shell_exec() in PHP 【发布时间】:2010-04-08 14:16:21 【问题描述】:
<?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的数据实时显示在屏幕上,有什么办法可以做到吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

试试这个:

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

它对我很有用。

【讨论】:

【参考方案3】:

试试passthru() 或popen()

代码如下所示:

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

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

【讨论】:

Ivo,您能否为其中任何一个添加代码示例?可能替代我上面的代码?

以上是关于PHP 中的 shell_exec()的主要内容,如果未能解决你的问题,请参考以下文章

PHP 中的 exec()、shell_exec、system() 和 passthru() 函数有啥不同? [复制]

PHP shell_exec 等待脚本完成? [复制]

无法使用PHP shell_exec执行powershell脚本函数

system 和 shell_exec 的区别

php脚本中的Linux shell命令

PHP协程:并发 shell_exec