How to run shell script with live feedback from PHP?

泄露秘密 提交于 2020-01-09 11:23:51

问题


How would I execute a shell script from PHP while giving constant/live feedback to the browser? I understand from the system function documentation:

The system() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.

I'm not clear on what they mean by running it as a 'server module'.

Example PHP code:

<?php

system('/var/lib/script_test.sh');

Example shell code:

#!/bin/bash

echo "Start..."
for i in {1..10}
do
        echo "$i..."
        sleep 1
done
echo "Done."

What this does: It will wait about 10 seconds and then flush to the output buffer.

What I want this to do: Flush to the output buffer after each line of output.


回答1:


This can be done using popen() which gives you a handle to the stdout of whatever process you open. Chunks of data can be sent to the client using ob_flush(), the data can be displayed using an XHR.




回答2:


One option is to write to a file in the shell script, on each step to say where it's up to. On your web page, use an ajax call every X seconds/minutes. The ajax call will call a PHP script which reads the status file and returns the status or completed steps.

The advantage to this approach is the page live information will be available to multiple visitors, rather than just the one that actually initiated the shell script. Obviously that may or may not be desirable depending on your needs.

The disadvantage of course is the longer the ajax interval, the more out of date the update will be.



来源:https://stackoverflow.com/questions/9791875/how-to-run-shell-script-with-live-feedback-from-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!