Ошибка длинного опроса PHP

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

$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);
    }

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


person Cystack    schedule 21.02.2012    source источник
comment
мы не можем видеть, где меняется $ _SESSION ['lasttime'] и $ last_modif, попробуйте без if и проверьте, работает ли   -  person ZiTAL    schedule 21.02.2012
comment
извините, я не добавил их, потому что я знаю, что они не актуальны: / на мой вопрос был дан ответ, еще раз спасибо   -  person Cystack    schedule 21.02.2012


Ответы (1)


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

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

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

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

person Mercutionario    schedule 21.02.2012
comment
Вы не должны ссылаться на w3schools, хотя спасибо за ответ, работает как шарм! - person Cystack; 21.02.2012
comment
W3Schools? Это кажется странным местом для советов по PHP. PHP.net говорит то же самое, поэтому w3schools не может быть всем плохой. - person Matt Ellen; 21.02.2012
comment
Да ладно, это не так уж и плохо, и у меня уже был открыт веб-сайт для другой вещи, которую мне нужно было проверить на sql. Мне нравится, насколько это лаконично. - person Mercutionario; 21.02.2012