Я хотел бы выполнить команду оболочки асинхронно в PHP. То есть PHP не должен дождаться завершения команды для продолжения выполнения. Однако, в отличие от многочисленного вопроса об этой теме в Stackoverflow, я забочусь о выходе программы. В частности, я хотел бы сделать что-то вроде этого:PHP Выполнение команды оболочки асинхронно и получение живого выхода
exec("some command", $output_array, $has_finished);
while(count($output_array) > 0 && !$has_finished)
{
if(count($output_array) > 0)
{
$line = array_shift($output_array);
do_something_with_that($line);
} else
sleep(1);
}
do_something_with_that($line)
{
echo $line."\n";
flush();
}
Приведенный выше код будет работать, если exec
будет немедленно вернуться в то же время добавления элементов в массив, и если существует способ, чтобы проверить, если процесс завершается или нет ,
Есть ли способ сделать это?
https://github.com/clue/php-shell-react или аналогичный –
Вы можете икру нить, которая делает это и проверить статус этого потока. Вероятно, есть много ресурсов, которые вы можете проверить. Однако вы не можете сделать это с помощью собственного PHP и вам понадобится модуль или библиотека. – apokryfos
@apokryfos [proc_open] (http://php.net/manual/en/function.proc-open.php) - очень родная функция PHP. Лицам просто немного удобнее работать с ним. –