PHP длинный опрос не удался - PullRequest
1 голос
/ 21 февраля 2012

У меня есть этот цикл для длинного опроса:

$time = time(); //send a blank response after 15sec
    while((time() - $time) < 15) {
            $last_modif = filemtime("./logs.txt");
            if($_SESSION['lasttime'] != $last_modif) {
                $_SESSION['lasttime'] = $last_modif;
                $logs = file_get_contents("./logs.txt");
                print nl2br($logs);
                ob_flush();
                flush();
                die();
        }

        usleep(10000);
    }

Проблема в том, что условие «если» никогда не вводится в середине цикла while, даже если logs.txt изменен.Мне нужно подождать 15 секунд до следующего вызова этого файла, чтобы получить обновленный контент (так что он становится обычным опросом AJAX "стиль setTimeout", а не длинным опросом).Есть идеи почему?

1 Ответ

3 голосов
/ 21 февраля 2012

Это из-за функции filemtime (): ее результаты кэшируются.Таким образом, каждый раз, когда ваш цикл выполняется, отметка времени остается неизменной в течение 15 секунд.

Я не пробовал сам, но в соответствии с w3cschools :

Результатэтой функции кешируются.Используйте clearstatcache () для очистки кеша.

Надеюсь, это поможет!

...