Все, что мы знаем, мы можем указать валидатор кэша для изображений, добавив следующие строки в файл .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 на лету? (вышеуказанные коды не эффективны для них)
П.С .: Я пытался смоделировать 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 M Y H:i:s', $DateUpdateBaseDef).' GMT';
TestModifiedSince($DateUpdateBaseDef, $TimeHeadUpdate);
Моя идея, внести изменения в конфигурацию сервера, чтобы выполнить другое расширение, а не только PHP. для печати изображений, когда вы используете тег img с источником файла php для рендеринга изображения. используйте другое расширение, такое как getimage.iphp.
Включите в свои настройки .htaccess с контролем кэша файла с расширением .iphp
Наконец, используйте заголовок внутри вашей функции генерации изображения, чтобы установить срок действия отдельного файла изображения.
Его теория битов, но может быть полезна в качестве идеи для реализации.