NYCPHP Meetup

NYPHP.org

[PHP] Cannot show reuploaded image file on page unless manual refresh

Chris Shiflett shiflett at php.net
Mon Jan 20 17:03:29 EST 2003


--- Phil Powell <soazine at erols.com> wrote:
> I am using the following header() functions to force
> view.php to not cache:
> 
> header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
> header("Last-Modified: " . gmdate("D, d M Y H:i:s") .
> " GMT");
> header("Cache-Control: no-store, no-cache,
> must-revalidate");
> header("Cache-Control: post-check=0, pre-check=0",
> false);
> header("Pragma: no-cache");

:-)

I think you killed it.

> However, when a user reuploads a file in manage.php, it
> does a form post onto manage.php and reuploads the file
> (which I verified works).  However, when redirected via
> header() to view.php, they still see their OLD image
> file, NOT the new one!  Unless I manually refresh the
> page, they never see it, until they manually refresh the
> page, then the new image file appears!

Right.

I think you are forgetting that the image is not really
part of the PHP resource. Meaning, this is the series of
events for a PHP script that refernces a single image
called bar.jpg using the <img> tag:

1. HTTP request sent for foo.php (Web client -> Web server)
2. HTTP response sent that includes the output of foo.php
   (Web server -> Web client)
3. Web client (browser) notices <img> tag referenced in
   the HTML.
4. HTTP request sent for bar.jpg (Web client -> Web server)
5. HTTP response sent that includes bar.jpg

So, the headers that you are setting only matter for the
resource returned in step 2. Meaning, the HTML output of
foo.php is not cached. The image, since it is returned by
the Web server and not your PHP script, is cached.

Chris



More information about the talk mailing list