PHP5.3 с проблемой кэширования FastCGI для разных запросов - PullRequest
0 голосов
/ 30 июня 2010

Я разработал пакет и минификатор файлов стилей / javascript, который использует простой механизм кэширования. Он просто записывает в файл временную метку каждого связанного файла и сравнивает эти временные метки, чтобы снова не переписать «главный файл». Таким образом, после обновления приложения (здесь мой веб-сайт), где были изменены файлы CSS или JS, один запрос снова вызовет кеширование только один раз. Этот и все другие запросы будут видеть скомпилированный файл, такой как master.css? V = 1234567.

Дело в том, что в моей среде разработки каждый тест проходит, интеграция работает отлично, и все работает, как ожидалось. Однако в моей промежуточной среде на сервере с PHP5.3, скомпилированным с FastCGI, мои кэшированные файлы, похоже, перезаписываются с неверными данными, но только если не запрашиваются из того же браузера.

Вариант использования:

  • Я делаю первый запрос на Firefox, под Linux. Все работает, как и ожидалось, для всех остальных запросов в этом браузере.
  • Как только я делаю запрос в Windows / Linux (IE7, IE8, Chrome и т. Д.), Мой файл кэша получает недопустимые данные, но только на промежуточном сервере, работающем под FastCGI, не в разработке!
  • Запуск еще одного запроса в Firefox корректно возвращает файл.

Мне тогда было интересно, как FastCGI имеет к этому какое-то отношение? Я думал, что клиенты браузера или даже операционные системы не имеют ничего общего с серверным кодом.

Я знаю, что эта проблема описана абстрактно, но вставка любого конкретного кода была бы слишком тяжелой ИМО, но я сделаю это, если она сможет прояснить мой вопрос.

Я попытался выполнить удаленную отладку своего кода и обнаружил, что все по-прежнему работает должным образом, даже кэшированный файл записывается правильно. Я видел, что когда возникает ошибка, файл записывается с ожидаемыми данными, но затем перезаписывается с недействительными данными через две секунды - после того, как php завершит свое выполнение! -

Есть ли способ отключить кэширование FastCGI для конкретных запросов через функцию PHP?

1 Ответ

1 голос
/ 02 июля 2010

В зависимости от вашей среды, вы можете посмотреть на разработку чего-либо, используя .htaccess в Apache для обслуживания этих запросов в обычном режиме cgi.Вероятно, это можно сделать с помощью простого AddHandler и Action, которые указывают на cgi напрямую.Этот тип предполагает, что вы развертываете в какую-то среду общего хостинга, где у вас нет прямого доступа к конфигурации Apache.

Поскольку fastcgi продолжает процесс в течение определенного периода времени, имеет смысл, что онВозможно, это приведет к перебиванию файла на более позднем этапе после первоначального выполнения, хотя конкретная ошибка может быть за мной.

Не очень много помощи, я знаю, но может дать вам несколько идей ...

РЕДАКТИРОВАТЬ: Вот код .htaccess из моего комментария ниже

Options -Indexes +FollowSymLinks +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php5.cgi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...