Re: [PHP] Cannot show reuploaded image file on page unless manualrefresh

2003-01-20 Thread ed

 Aha! Something I can chime in on. I happened across the same scenario a
few months back. The list helped me then so I'll give back.

 Call the image using a random identifier.

$rand = rand(1000, );

echo img src=http://someurl.com/image.jpg?$rand;;

Since the browser will more than likely not have the image file identified
by the random number it must request it again from the server. Works
great where I need it!

Ed

On Mon, 20 Jan 2003, Chris Shiflett wrote:

 --- Phil Powell [EMAIL PROTECTED] 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
 
 -- 
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php
 


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




Re: [PHP] Cannot show reuploaded image file on page unless manualrefresh

2003-01-20 Thread Chris Wesley
On Mon, 20 Jan 2003, Phil Powell 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);// Date in the past
 header(Last-Modified:  . gmdate(D, d M Y H:i:s) .  GMT);
 header(Cache-Control: no-store, no-cache, must-revalidate);  // HTTP/1.1
 header(Cache-Control: post-check=0, pre-check=0, false);
 header(Pragma: no-cache);  // HTTP/1.0

view.php will never be cached ...

 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!

but you failed to address the caching of images in any of your code or
setup.  The cache headers on the view.php script have /no/ affect on
anything but view.php.  You're fighting the communication betweneen the
browser and the web server, so configure one or the other to play nicely.

- Disable caching in your browser.
- Configure your web server to include cache-control  expires headers on
  all pertinent image requests.  (For example, see mod_expires for Apache:
  http://httpd.apache.org/docs/mod/mod_expires.html)

In lieu of those, change the way you handle uploads.

Instead of using the exact filename of the uploaded file, rename the file
slightly, to include a timestamp or some other changing identifier each
time the file is uploaded.  For exampple, when myImage.jpg is uploaded,
save it as myImage-001.jpg the first time, myImage-002.jpg the second
time.

g.luck,
~Chris



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php