Показать журнал процесса на веб-странице - PullRequest
0 голосов
/ 15 июля 2010

У меня есть веб-страница, которая позволяет запустить определенный процесс, а затем перенаправить на другую страницу, на которой отображается файл журнала этого процесса. Поскольку выполнение занимает до 10 минут, я хочу, чтобы страница журнала автоматически обновлялась или периодически загружала данные из файла.

Прямо сейчас я добавил

<meta http-equiv="refresh" content="5;url=log.php#bottom" /> 

в html / head, но интересно, может ли быть лучшее решение. Может кто-нибудь дать совет по поводу решения этой проблемы?

Ответы [ 4 ]

1 голос
/ 15 июля 2010

Я делаю это так:

var current_length = 0;
function update() {
  setTimeout(update, 3000);
  $.post("/update_url", { 'current_length': current_length }, function(data) {
    if (data.current_length != current_length) return; //it's too old answer
    $("#log").html($("#log").html() + data.text);
    current_length += data.text.length;
  }, "json"); 
}
update();

Сервер должен пропустить несколько байтов в начале и отправить json с current_length и остальной частью файла.

Я предпочитаю использовать memcached для сохранения процессавыход.

1 голос
/ 15 июля 2010

Вы могли бы:

  • Периодически опрашивайте сервер, чтобы узнать, есть ли еще сообщения, в основном вы должны вызывать скрипт PHP с javascript и передавать длину файла журнала в последнем опросе, а затем вставлять в документ новые данные. Сервер вернет все данные после этого смещения, а также новую длину.
  • (проще) Создайте долгоживущий PHP-скрипт, который продолжает чтение файла, выводит эхо и сбрасывает его, как только появляются новые данные. См. PHP: Как читать файл в реальном времени, который постоянно записывается в .
0 голосов
/ 15 июля 2010

Почему бы не использовать JavaScript?

Используйте setInterval и периодически запускайте вызов AJAX для log.php.

Вы могли бы также использовать iframe, но, на мой взгляд, лучший способ сделать это - AJAX-вызов perdodical

0 голосов
/ 15 июля 2010

Используйте AJAX для этого.Легко в jQuery:

    <script type="text/javascript">

    $(function(){
        window.setInterval('updateLog()', 5000);
    });

    function updateLog() {
        $.get('log.php');
    }

    </script>
...