Эхо выполнил результат команды построчно

У меня есть PHP-файл, который запускает команду на Linux с помощью shell_exec(), Для выполнения этой команды требуется некоторое время, и на каждом этапе она что-то печатает. Я хочу, чтобы php отображал каждую строку, напечатанную командой на данный момент это напечатано.

Я узнал, используя ob_flush() а также flush(), можно сделать такие чанкованные http ответы, но я не могу повторить строки, так как они напечатаны, потому что shell_exec() ожидает завершения команды и возвращает результат. Таким образом, строки выводятся после завершения команды все сразу.

Я считаю, что я должен избегать использования shell_exec() для такой цели. Как еще я могу достичь этого?

1

Решение

<?php
$cmd = "ping www.google.com";

$descriptorspec = array(
0 => array("pipe", "r"),   // stdin is a pipe that the child will read from
1 => array("pipe", "w"),   // stdout is a pipe that the child will write to
2 => array("pipe", "w")    // stderr is a pipe that the child will write to
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array());
echo "<pre>";
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
print $s;
flush();
}
}
echo "</pre>";

Источник

2

Другие решения

Вам нужно очистить буфер вывода, чтобы сразу его напечатать:

echo "hello world\n";
flush();

Проверьте документацию flush()

0

По вопросам рекламы [email protected]