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