I'm just experimenting with PHP and shell_exec
on my Linux server. It's a really cool function to use and I am really enjoying it so far. Is there a way to view the live output that is going on while the command is running?
For example, if ping stackoverflow.com
was run, while it is pinging the target address, every time it pings, show the results with PHP? Is that possible?
I would love to see the live update of the buffer as it's running. Maybe it's not possible but it sure would be nice.
This is the code I am trying and every way I have tried it always displays the results after the command is finished.
<?php $cmd = 'ping -c 10 127.0.0.1'; $output = shell_exec($cmd); echo "<pre>$output</pre>"; ?>
I've tried putting the echo
part in a loop but still no luck. Anyone have any suggestions on making it show the live output to the screen instead of waiting until the command is complete?
I've tried exec
, shell_exec
, system
, and passthru
. Everyone of them displays the content after it's finished. Unless I'm using the wrong syntax or I'm not setting up the loop correctly.
To read the output of a process, popen()
is the way to go. Your script will run in parallel with the program and you can interact with it by reading and writing it's output/input as if it was a file.
But if you just want to dump it's result straight to the user you can cut to the chase and use passthru()
:
echo '<pre>'; passthru($cmd); echo '</pre>';
If you want to display the output at run time as the program goes, you can do this:
while (@ ob_end_flush()); // end all output buffers if any $proc = popen($cmd, 'r'); echo '<pre>'; while (!feof($proc)) { echo fread($proc, 4096); @ flush(); } echo '</pre>';
This code should run the command and push the output straight to the end user at run time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With