Мониторинг работы PHP-скрипта

Рейтинг: 1Ответов: 1Опубликовано: 03.05.2015

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

Решил, что попробую совместить PHP с AJAX. Получилось что-то вроде этого:

ajax.js

function go() {

    var req = getXmlHttp()
    var statusElem = document.getElementById('status') 

    req.onreadystatechange = function() {  
        if (req.readyState == 4 && req.status == 200) {
            statusElem.innerHTML = req.responseText
        }
    }

    req.open('GET', '/script.php', true);  
    req.send(null);

    statusElem.innerHTML = 'Ожидаю ответа сервера...' 
}

script.php

<?php
    $somearrays = array('1', '2', '3');
    foreach($somearrays as $somearray) {
        sleep(3);
        echo $somearray;
    }
?>

Недолго думая, я нажал на кнопочку и стал ждать каждые 3 секунды новый "отчет". Но не тут-то было. Спустя 3 секунды не пришел ни один "отчет", но за-то они все пришли через 9 секунд, что меня не очень-то обрадовало.

Вопрос: Как циклично получать результаты выполнения функций в цикле во время его работы?

Ответы

▲ 2

GET /script.php вообще-то нельзя назвать "слежением за работой". Это вызов нового процесса.
Ответ приходит только по окончании работы веб-скрипта — это нормальное поведение.

Насколько я понимаю изначальную задачу, надо иметь некий долгоживущий процесс на сервере (CLI, а не CGI) и смотреть чего он там наработал. Рекомендую писать результаты скрипта в лог-файл, а веб-монитором по таймеру этот лог читать. То есть нужны 3 компонента:

  • сам CLI-скрипт, пишуший в лог;
  • серверная часть монитора, которая умеет читать лог с указанного места;
  • клиентский монитор, который шлет задание на сервер и визуализирует ответ.

Гуглите сочетание "php web tail".