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
?>

When the script above is executed from the browser, it loads for 10s and the dumps the output of the script to the screen. This is, of course, normal. But if I want the data written to STDOUT by the shell script to be displayed on the screen in real-time, is there some way I could do it?

3 Answers 3

2

I would add proc_open() which gives you much more control over command execution if you need it, if not try passthru() or popen() as it was mentioned before.

Sign up to request clarification or add additional context in comments.

Comments

2

Try this:

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

It works great for me.

Comments

1

Try passthru() or popen()

The code will look something like this:

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

As @wik suggest below you can also try proc_open instead of popen it should work in a similar fashion.

1 Comment

Could you add a code example for either of them, Ivo? Possibly a replacement for my code above?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.