dtvx3420
2017-02-28 21:28
浏览 287
已采纳

从php运行shell脚本并查看完整进度?

Is there a way to run a shell script from PHP and echo the results after progress is completed?

Here is my shell script:

(Its multilines - a few commands that have to be ran one after the other. )

cd
cd /var/www/html/
npm uninstall gulp --save
npm install gulp --save
npm start

here's my currently functioning PHP script. It only outputs some of the progress and only outputs it when complete. I need a live preview of the progress.

    <?php
echo "loaded<br><br>";
 // echo shell_exec("cd /var/www/html/..");
// rin the shell scrip from header_register_callback
echo '<pre>';
// Outputs all the result of shellcommand "ls", and returns
// the last output line into $last_line. Stores the return value
// of the shell command in $retval.
$last_line = system('cd /var/www/html/; npm start', $retval);
// Printing additional info
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
?>

图片转代码服务由CSDN问答提供 功能建议

有没有办法从PHP运行shell脚本并在完成进度后回显结果?

这是我的shell脚本:

(它的多行 - 一些必须一个接一个地运行的命令。)

  cd 
cd / var / www / html / 
npm uninstall gulp --save 
npm install gulp --save 
npm start 
   
 
 

这是我目前正在运行的PHP脚本。 它仅输出一些进度,仅在完成时输出。 我需要预览进度。

 &lt;?php 
echo“loaded&lt; br&gt;&lt; br&gt;”; 
 // echo shell_exec(“cd /  var / www / html / ..“); 
 //从header_register_callback 
echo'&lt; pre&gt;'获取shell脚本; 
 
 //输出shell命令”ls“的所有结果,并返回
 // 最后一行输入到$ last_line。 在$ retval中存储shell命令的返回值
 //。
 $ last_line = system('cd / var / www / html /; npm start',$ retval); 
 //打印其他信息
echo  '
&lt; / pre&gt; 
&lt; hr /&gt;输出的最后一行:'。  $ last_line。  '
&lt; hr /&gt;返回值:'。  $ retval; 
?&gt; 
   
 
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • duanqiao1947 2017-03-01 22:54
    最佳回答

    Here is another approach. It uses redirection to output the results and then file_get_contents() to read the output.

    <?php
    
    echo "loaded<br><br>";
    
    $cmd = 'npm start';
    $run = $cmd . ' > result.txt 2> errors.txt';
    $output = shell_exec($run);
    
    $results = file_get_contents('result.txt');
    if (strlen(file_get_contents('errors.txt')) != 0) {
      $results .= file_get_contents('errors.txt');
    }
    
    echo "<pre>$results</pre>";
    
    ?>
    
    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题