Укажите проверку валидатора для изображений, созданных функциями imagejpeg/imagepng.

Все, что мы знаем, мы можем указать валидатор кеша для изображений, добавив следующие строки в файл .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 изображением), но все же получение предупреждения о валидаторе кеша.

Ответ 1

Вы можете добавить 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);

Ответ 2

Моя идея, внесите изменения в конфигурацию сервера, чтобы выполнить другое расширение, а не только PHP. для печати изображений при использовании тега img с источником файла php для рендеринга изображения. используйте другое расширение, такое как getimage.iphp. Включите в свои настройки .htaccess с управлением кешем файла с расширением .iphp

Наконец, используйте заголовок внутри вашей функции генерации изображений, чтобы установить истечение отдельного файла изображения.

Его теория бит, но может быть полезной как идея для реализации.