Долго я не мог найти ответ на вопрос о реализации постоянной загрузке страницы в чате, так же много раз натыкался на топики в форумах, где народ просто не знал почему же у них ничего не работает ! Сегодня я постараюсь ответить на все вопросы на конкретном примере...
При постоянной загрузке окна чата, необходимо использовать функцию flush(), которая выводит на экран буфер браузера. Например если у вас не до конца загрузилась таблица, то она не выведется в браузере, пока данные таблицы не будут получены до конца. Если вставить функцию flush() посередине этой таблички, то выведется та часть таблицы идущая до функции flush(), ну а позже когда данные таблицы загрузятся до конца (до тэга </table>), то на экран выведется остальная часть.
Так и в чате... Ваш скрипт вывода сообщений, вечным циклом сканирует базу на наличие новых сообщений, и если есть новые сообщения то выводит их - echo() и после этого вызывает функцию flush(), чтоб сообщения появились на экране.
Разберём конкретный пример:
<?php
// Эти две строки нужны чтоб вечный цикл не обрывался set_time_limit(0); ignore_user_abort(true); // Этот цикл выводит шапку. Если этого не делать, то первые 5-10 сообщений не будут сразу выводиться for ($i = 0; $i < 20; $i++) { echo "<!-- -->"; } flush(); $last_mess = 0; while (1 == 1) { // Вечный цикл sleep(2); $base = file("messages.dat"); if (count($base) > $last_mess) {// Если в базе есть новые строки for ($i = $last_mess; $i < count($base); $i++) { // То циклом выводим их echo $base[$i]."<br>\n"; } $last_mess = count($base); flush(); } } ?>
Теперь запустите этот скрипт в браузере, и откройте в блокноте файл messages.dat. Дописывайте в файл по строке и сохраняйте файл, и вы увидите как в окне браузера дописываются строки ! Вот и постоянная загрузка готова :)
Косяки 1. Первые строки могли не выводиться если бы мы не выводили в начале файла шапку из символов (<!-- --><!-- -->...). 2. Если пример не работает, то скачайте с сайта http://www.apache.org/ Apache версии 2 ! У меня на Apache 1.3.23 под Windows ничего не работало :(