304通过PHP提供文件时没有修改响应

时间:2015-09-30 09:02:14

标签: php caching

我有一个PHP文件提供图像文件。我看起来像这样:

$dir = 'directory/containing/files';
$file = getFileInfoFromDatabase(filter_input(INPUT_GET, 'article'));

header("Content-Type: $file->type; name=\"$file->filename\"");
header("Name: \"$file->filename\"");
header("Content-Disposition: inline; filename=\"$file->filename\"");
header("Content-Length: $file->size");

die(readfile($dir.'/'.$file->id));

调用此文件的网址如下所示:www.example.com/article/image.php?article=44是文章的ID,它被发送到数据库以获取存储在那里的与该文章相关的图像文件的信息。

这很有效。加载网址时,我得到的图片和一些响应标题如下所示:

Cache-Control:private, max-age=10800, pre-check=10800
Connection:Keep-Alive
Content-Disposition:inline; filename="filename.jpg"
Content-Length:37308
Content-Type:image/jpeg; name="filename.jpg"
Date:Wed, 30 Sep 2015 08:42:26 GMT
Keep-Alive:timeout=5, max=75
Last-Modified:Wed, 30 Sep 2015 08:32:19 GMT
Name:"filename.jpg"
Server:Apache

下次尝试加载网址时,请求包含以下标头:

If-Modified-Since:Wed, 30 Sep 2015 08:32:19 GMT

我得到304 Not Modified回复,没问题。

但是,如果我更新数据库以指向其他文件,我会得到相同的304 Not Modified响应!我必须修改提供图像文件的php文件以获取图像文件的新版本。

我该如何解决这个问题?我是否必须关闭此文件的缓存?或者我可以以某种方式将Last-Modified标题更改为图像文件而不是php文件吗?

1 个答案:

答案 0 :(得分:0)

如果您知道更改文件的修改时间,则可以在请求last_modified较旧时更改If-Modified-Since标题。