Я разработал пакет и минификатор файлов стилей / javascript, который использует простой механизм кэширования. Он просто записывает в файл временную метку каждого связанного файла и сравнивает эти временные метки, чтобы снова не переписать «главный файл». Таким образом, после обновления приложения (здесь мой веб-сайт), где были изменены файлы CSS или JS, один запрос снова вызовет кеширование только один раз. Этот и все другие запросы будут видеть скомпилированный файл, такой как master.css? V = 1234567.
Дело в том, что в моей среде разработки каждый тест проходит, интеграция работает отлично, и все работает, как ожидалось. Однако в моей промежуточной среде на сервере с PHP5.3, скомпилированным с FastCGI, мои кэшированные файлы, похоже, перезаписываются с неверными данными, но только если не запрашиваются из того же браузера.
Вариант использования:
- Я делаю первый запрос на Firefox, под Linux. Все работает, как и ожидалось, для всех остальных запросов в этом браузере.
- Как только я делаю запрос в Windows / Linux (IE7, IE8, Chrome и т. Д.), Мой файл кэша получает недопустимые данные, но только на промежуточном сервере, работающем под FastCGI, не в разработке!
- Запуск еще одного запроса в Firefox корректно возвращает файл.
Мне тогда было интересно, как FastCGI имеет к этому какое-то отношение? Я думал, что клиенты браузера или даже операционные системы не имеют ничего общего с серверным кодом.
Я знаю, что эта проблема описана абстрактно, но вставка любого конкретного кода была бы слишком тяжелой ИМО, но я сделаю это, если она сможет прояснить мой вопрос.
Я попытался выполнить удаленную отладку своего кода и обнаружил, что все по-прежнему работает должным образом, даже кэшированный файл записывается правильно. Я видел, что когда возникает ошибка, файл записывается с ожидаемыми данными, но затем перезаписывается с недействительными данными через две секунды - после того, как php завершит свое выполнение! -
Есть ли способ отключить кэширование FastCGI для конкретных запросов через функцию PHP?