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

3 ответа

Решение

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

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

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

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

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

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

Это прекрасно работает для меня.

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

Другие вопросы по тегам