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(), как было упомянуто ранее.