С неоценимой помощью людей из StackOverflow мне удалось запустить bash-скрипт из php. Сейчас все работает нормально, но так как сценарию требуется несколько минут до конца, я бы хотел увидеть прогресс. В скрипте bash есть несколько команд printf, которые выводят сообщения об ошибках / успехах.
Как новичок в php, я предполагал, что эти сообщения будут появляться по мере их выполнения в скрипте bash. Но я не получаю никакого вывода, хотя скрипт завершен. Я могу видеть созданные файлы и наверняка сценарий завершен, но я не могу увидеть вывод php в браузере.
Как я могу проверить прогресс, когда скрипт еще работает? Почему php не заканчивается?
Ниже приведен скрипт php.
<?php
echo "<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=UTF-8 />
<title>Title</title>
<link href=../style.css rel=stylesheet type=text/css>
</head>
<body topmargin=0 leftmargin=0>";
echo '<font color=blue>';
echo '------------------------------------------------------------- <br>';
echo 'Inicio de la generación manual de mapas de olas de calor<br>';
echo 'Este proceso tarda varios minutos<br>';
echo '-------------------------------------------------------------<br>';
echo date('h:i:s') . "\n";
$output = shell_exec('/home/meteo/www/RAMS/olas/generar-mapas.bash');
echo "<pre>".$output."</pre>";
echo '</font>';
echo '</body>';
echo '</html>';
?>
Я прочитал несколько постов на форуме о php, Ajax и jQuery для индикаторов выполнения, но я просто знаю некоторые очень простые php. Есть ли простое решение для новичка в php?
Спасибо за вашу помощь
shell_exec()
блоки до завершения дочернего процесса, используйте popen()
вместо:
$p = popen('/home/meteo/www/RAMS/olas/generar-mapas.bash', 'r');
while(!feof($p)) {
echo fgets($p);
ob_flush();
flush();
}
pclose($p);
Других решений пока нет …