оболочка exec() в PHP


<?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 секунд и выводит вывод сценария на экран. Это, конечно, нормально. Но если я хочу, чтобы данные, записанные в стандартный вывод сценарием оболочки, отображались на экране в режиме реального времени, могу ли я каким-то образом это сделать?

Author: Amarnath Ravikumar, 2010-04-08

3 answers

Попробуйте passthru() или попен()

Код будет выглядеть примерно так:

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

Как @wik предлагает ниже, вы также можете попробовать proc_open вместо popen, он должен работать аналогичным образом.

 1
Author: Ivo Sabev, 2010-04-10 02:49:08

Я бы добавил proc_open(), который дает вам гораздо больший контроль над выполнением команд, если вам это нужно, если не попробовать passthru() или popen(), как упоминалось ранее.

 2
Author: wlk, 2010-04-08 15:30:18

Попробуйте это:

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

Это отлично работает для меня.

 2
Author: Kwinto, 2011-12-30 12:28:52