file_get_contents no caching?

libertaire picture libertaire · Feb 13, 2014 · Viewed 10k times · Source

I'm using file_get_contents() to load a dynamic image from an external website.

The problem is that the image has been updated on the remote website but my script is still displaying the old image. I assume the server cache the image somewhere but how can i force the server to clear the cache and use the updated image when getting the file with file_get_contents ?

On my local machine, i had to do CTRL+F5 to force refresh on the image.

I also tryed to add no cache header to my script, but it didn't work:

    $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();

Answer

Alma Do picture Alma Do · Feb 13, 2014

Your problem is that you're using external resource to load your file. Once it was loaded - there's no sense to send some headers to your client. Your image already been loaded (and that was cache from external resource).

However, there's easy trick to resolve an issue. Let's suppose you're using something like http://domain.com/path/to/image in your $path. Then just do:

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

-so idea is to add some random value to GET-request and prevent it from being cached.