Вы должны использовать javascript с отсечкой в 5 минут, который через, например, ajax запрашивает с сервера очередной анекдот и затем заменяет в div с анекдотом старым value (или html) на анекдот новый.
Не путайте, PHP работает на сервере, а у юзера работает javascript.
Проблема то вот в чем:
1. Пока ТЮ (тупой/тормозной юзер) бродит по конторе/пьет чай/подвергается орально-анальному воздействию у начальства или вообще ушел домой, на его компе, естественно, висит открытая страница (а в случае с Оперой - даже если страница закрыта, но не разлогинена, то сессия продолжает в ней висеть, если сама Опера не закрывалась).
2. Приходит ХЖП (хитрожопый поганец) и от имени ТЮ делает всякую пакость. Далее по логам ТЮ получает люлей вместо ХЖП.
Для этого сделан разлогин по времени. Это не спасет, конечно, полностью, но уменьшит риск.
Но вот продолжение пункта 1.
3. ТЮ (а чаще всего это лурковская ТП) приходит и продолжает то, что она набирала "вчера" (да, такой прикол тоже встречается - оставляют включенными комп, чтобы завтра добрать и отправить, свет вырубают редко).
4. Тык "Далее" - и на экране радостное сообщение, что надо залогиниться. Груда кирпичей и все такое.
Поэтому ДВЕ задачи:
1. НЕЛЬЗЯ автоматически воссоздавать сессию, если разлогин УЖЕ произошел (чтобы ХЖП не смог продолжить работать под аккаунтом ТЮ), если эта ТП оставила окно открытым или Оперу незакрытой.
2. Необходимо, чтобы когда сессия потерлась на сервере, у юзера выпадало окно-предупреждение, возможно с окном Логина, так как после Логина во втором окне (по крайней мере в Опере) данные из первого окна уйдут уже по новой сессии. Или просто предупреждение - типа скопируй, хотя бы, и перелогинься.
Если же что то типа "file", то тут в зависимости от "бро" - у Оперы и некоторых других можно ему присвоить "пусто" и поле очистится, у других "бро" - эти поля имеют атриьут read-only и тогда поможет только удаление и новое создание такого объекта.
Ну а если полная очистка формы - то само собой инпут тип reset.
Хм... логично.
Просто под "тупо" я подразумевал просто джаваскриптовский отсчет 2 часов с момента "начала" работы и выведение сообщения, как только 2 часа миновало. Безо всяких запросов.
Но этот вариант не катит, если работать в 2 окна - в одном напишет, что все уже, а во втором сессия будет активна и ее время не истечет.
Выставлено ограничение сессии по времени в 2 часа.
Как только она истекает, происходит автоматический разлогин юзера.
Однако есть люди, мягко говоря, медленно думающие и работающие, поэтому они с перерывами могут занудно долго набирать текст в форму и ткнуть "Далее" через 2,5 часа после начала сессии. И тогда вместо размещения их неэпического труда сайт выкидывает им окошко логина.
Груда кирпичей, повторный логин и снова набор текста.
Где то на сайте видел, что если долго сидишь и сессия разрегистрировалась, то выводится предупреждение об этом. Но вот забыл где. Просто ушел на дело, вернулся -висит сообщение про разлогин.
Как это сделать? Не ставить же тупо джаваскрипт счетчик времени и после истечения выводить предупреждение?
Кстати, по этой формуле мне полагается 0 (ноль) ударов. Все формируется в переменных контента, затем выводится 1 раз в конце обработки.
Я все же не полный извращенец.
А тут меня интересовало именно (упрощенно):
Что быстрее и ненапряжнее для сервера:
- 1000 раз считать 6,5к строк и проинтерпретировать их, даже если в 70% случаев потребуется лишь 3,5к строк из всех.
ИЛИ
- 700 раз считать в сумме около 3,5к строк, но использовав при этом инклуды (т.е. не 1 файл, а несколько), а 300 раз считать 6,5к строк, но опять же из нескольких файлов (опять же инклудами).
Если уж совсем извращенный тип - то просто вставь в цикл запись номера итерации ($i) в ДРУГОЙ файл (типа file_put_contents("iter.txt",$i);
И читай его (в примере - iter.txt) аяксом, выводя значение.
Смысл такой:
Юзер просматривает файл. Если он хочет его скачать, жмет на ссылку, после чего происходит обращение на сервер через ajax-запрос.
Примерно так:
Смысл:
Запрошенный скрипт, получивший имя файла (из переменной $pdffile) проверяет наличие его в кеше (если ранее его уже запрашивали), если есть - надо, чтобы отдал на скачивание, если нет - генерирует его (это уже сделано) и отдает.
Как заставить его запустить этот файл пользователю на скачивание?
Проблема в том, что страница "юзеров" постоянно меняется (из за частого обновления контента).
Я и так вынес все, что более-менее стабильное (что меняется раз в неделю, хотя бы) во внешние файлы (гружу через инклуды).
Кеширование практически невозможно, кроме генерированных для загрузки PDF-файлов, которые генерируются по запросу первый раз, а затем берутся из кеша.