file_get_contents没有缓存?

时间:2014-02-13 12:58:37

标签: php image caching file-get-contents

我正在使用file_get_contents()从外部网站加载动态图片。

问题是图像已在远程网站上更新,但我的脚本仍然显示旧图像。我假设服务器在某处缓存图像,但是如何在使用file_get_contents获取文件时强制服务器清除缓存并使用更新的图像?

在我的本地机器上,我必须按CTRL + F5强制刷新图像。

我还尝试在我的脚本中添加无缓存标头,但它不起作用:

    $image = imagecreatefromstring(file_get_contents($path));
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
header('Content-type: image/png');
imagepng($image);
exit();

1 个答案:

答案 0 :(得分:16)

您的问题是您正在使用外部资源来加载文件。加载后 - 将一些标题发送到您的客户端是没有意义的。您的图像已经已加载(这是来自外部资源的缓存)。

然而,解决问题很容易。假设您在http://domain.com/path/to/image中使用$path之类的内容。然后就做:

$image = imagecreatefromstring(file_get_contents($path.'?'.mt_rand()));

- 的想法是向GET请求添加一些随机值,并防止它被缓存。