PHP не подчиняется моим определенным ETag - PullRequest
3 голосов
/ 11 мая 2010

Что я делаю

Я вытаскиваю изображение из базы данных и отправляю его в браузер со всеми необходимыми заголовками - изображение отображается нормально. Я также отправляю заголовок ETag, используя в качестве тега SHA1 содержимого изображения.

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

Проблема

$ _ SERVER ['HTTP_IF_NONE_MATCH'] мне недоступен. Насколько я могу судить, это связано с тем, что PHP «не подчиняется контролю кэша». Я не могу связываться с ограничителем кэша сеанса, потому что у меня нет доступа. Но даже если бы у меня был доступ, я бы не стал его трогать: 99% сайтов находится под WordPress.

Окружающая среда

  • PHP 4 (не спрашивайте)
  • Apache 2.2
  • WordPress
  • Изображения живут в базе данных (largeblog), которую я не могу изменить.

Любые советы, подсказки и т. Д. Будут полезны. У меня мало места, чтобы изменить экологические / структурные элементы.

Приветствие.

Ответы [ 2 ]

2 голосов
/ 15 мая 2010

Вы пытались прочитать HTTP_IF_NONE_MATCH из apache_request_headers () ?

Если вы используете pre-4.3 php, то раньше он назывался getallheaders ().


Редактировать Теперь я вижу на странице, на которую я ссылался, что вы также можете попытаться поставить

RewriteEngine on
RewriteRule .* - [E=HTTP_IF_MODIFIED_SINCE:%{HTTP:If-Modified-Since}]
RewriteRule .* - [E=HTTP_IF_NONE_MATCH:%{HTTP:If-None-Match}]

в соответствующем файле .htaccess, чтобы заставить Apache установить переменные PHP $ _SERVER [...], которые вы безуспешно пытаетесь прочитать.

0 голосов
/ 15 мая 2010

Если PHP не получает заголовок соответствия If-None-Match, вы мало что можете сделать. Я не знаю, что вы подразумеваете под "PHP" не подчиняться элементам управления кэшем ""; PHP генерирует произвольную динамическую динамику, априори он не может знать, кешируется ли то, что он возвращает, клиентом или нет.

В любом случае, вам следует выяснить, действительно ли клиент отправляет заголовок. Если это так, но он не достигает PHP, проверьте, достигает ли он Apache. Если он достигает PHP, но не Apache, вы всегда можете взломать какое-нибудь решение с помощью mod-rewrite, например, добавив заголовок в виде строки запроса (не проверено!):

RewriteCond %{HTTP_IF_NONE_MATCH} (.+)
RewriteRule ^/get_image.php /get_image.php?if-none-match=%1 [B,QSA]
...