为imagejpeg/imagepng函数创建的图像指定缓存验证程序

Ima*_*azi 9 php .htaccess caching imagejpeg

我们都知道我们可以通过在.htaccess文件中添加以下行来为图像指定缓存验证器:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 1 year"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

..和..

<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>
Run Code Online (Sandbox Code Playgroud)

但是,它对真正的JPG或PNG文件有效.但问题是,如何为使用PHP代码和imagejpeg/imagepng函数构建的图像指定缓存验证器?(以上代码对他们无效)

PS:我试图使用.htaccess文件模拟PHP创建的图像的URL,如真实图像(例如:http://example.com/1.jpg由PHP文件生成并且不是真正的.jpg图像),但仍然接收缓存验证器警告.

Cro*_*ses 9

您可以在imagejpeg/imagepng函数之前添加PHP代码:

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);
Run Code Online (Sandbox Code Playgroud)