Индикатор выполнения bash-скрипта, запускаемого из php

0

С неоценимой помощью от людей в 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? Спасибо за вашу помощь

  • 1
    Совет по Pro PHP: не нужно echo абсолютно все. Вы можете просто закрыть ?> , Выход HTML, а затем снова откройте <?php , когда вам нужно. Совет по Pro HTML: <font> очень старомоден и больше не должен использоваться. Если вы хотите, чтобы шрифт был синим, используйте CSS.
  • 0
    @ tom-fenech Согласитесь с использованием CSS, просто ошибка копирования-вставки. Не нужно повторять все, но суть в том, что появляется любое отдельное echo . Извините , если слишком простой , но что же близко ?> Означает? Разве это не закрыто? вывод html не появляется. Спасибо за ответы.
Показать ещё 2 комментария
Теги:
progress-bar

1 ответ

1
Лучший ответ

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);
  • 0
    Привет @marek и спасибо. Кажется, popen не работает для меня. Не запускается ни один процесс, скрипт bash не запускается.
  • 0
    Я забыл добавить режим, надеюсь, это поможет. Может быть необходимо вывести больше байтов, если где-то есть неявный буфер.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню