Все, что мы знаем, мы можем указать валидатор кеша для изображений, добавив следующие строки в файл .htaccess:
<IfModule mod_expires.c> ExpiresActive On ExpiresDefault "access plus 1 year" </IfModule>
.. а также ..
<IfModule mod_headers.c> <FilesMatch "\.(bmp|css|flv|gif|ico|jpg|jpeg|js|pdf|png|svg|swf|tif|tiff)$"> Header set Last-Modified "Mon, 31 Aug 2009 00:00:00 GMT" </FilesMatch> </IfModule>
Но это будет эффективно для реальных файлов JPG или PNG. Однако вопрос заключается в том, как указывать кеш-валидатор для изображений, созданных с помощью PHP-кодов и функций imagejpeg / imagepng на лету? (выше коды не эффективны для них)
PS: Я попытался имитировать URL-адрес образа, созданного PHP, как реальное изображение, используя файл .htaccess (например: http://example.com/1.jpg
, который генерируется файлом PHP и не является реальным .jpg изображение), но все еще принимает предупреждение о валидаторе кеша.
Вы можете добавить PHP-код перед функциями imagejpeg / imagepng:
function TestModifiedSince($PageTimeStamp, $TextDatePage) { if (isset($_SERVER["HTTP_CACHE_CONTROL"])) {return;} if (!isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {return;} $TestTime=strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]); if (($TestTime - $PageTimeStamp) >= 0) { header('Last-Modified: '. $TextDatePage, true, 304); exit(); } } # hh mm ss MM DD YYYY $DateUpdateBaseDef = mktime(00, 00, 00, 08, 31, 2009); $TimeHeadUpdate = gmdate('D, d MYH:i:s', $DateUpdateBaseDef).' GMT'; TestModifiedSince($DateUpdateBaseDef, $TimeHeadUpdate);
Моя идея, внести изменения в конфигурацию сервера, выполнить другое расширение, а не только PHP. для печати изображений при использовании тега img с источником файла php для рендеринга изображения. используйте другое расширение, такое как getimage.iphp. Включить в свои настройки .htaccess с контролем кеша файла с расширением .iphp
Наконец, используйте заголовок внутри вашей функции генерации изображений, чтобы установить истечение срока действия отдельного файла изображения.
Его теория бит, но может быть полезной в качестве идеи для реализации.