This is a discussion on Is it possible to stop an image from being cached? within the PHP General forums, part of the PHP Programming Forums category; I have a situation where there is a single image let's call it somebody.jpg. I want to be ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
I have a situation where there is a single image let's call it somebody.jpg.
I want to be able to dynamicly create this image using php, basicilly I have PHP set to handle .jpg files also, so I then go through and create an image based upon some info I get from a database call and then use header('Content-Type: image/jpeg'); passthru($file); to send the image to the user. My problem is once they view the image their browser "helpfully" caches it so they don't have to download it again. Is there any tactic short of changing the name constantly of the image to avoid browser caching of an image? - Dan |
|
|||
|
On 7/26/07, Dan <frozendice@gmail.com> wrote:
> I have a situation where there is a single image let's call it somebody.jpg. > I want to be able to dynamicly create this image using php, basicilly I have > PHP set to handle .jpg files also, so I then go through and create an image > based upon some info I get from a database call and then use > header('Content-Type: image/jpeg'); > passthru($file); > to send the image to the user. > > My problem is once they view the image their browser "helpfully" caches it > so they don't have to download it again. > > Is there any tactic short of changing the name constantly of the image to > avoid browser caching of an image? > > - Dan Solution 1: Send a header() that avoids caching (can't remember it exactly) Solution 2: Call the image like this: <img src="image.jpg?arandomstringhereeachtime"> Or if you were creating it with a php script: <img src="image.php?img=image.jpg&arandomstringhereeach time"> Tijnema -- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
|
|||
|
> Solution 1:
> Send a header() that avoids caching (can't remember it exactly) > Solution 2: > Call the image like this: > <img src="image.jpg?arandomstringhereeachtime"> > Or if you were creating it with a php script: > <img src="image.php?img=image.jpg&arandomstringhereeach time"> My preferred way of doing it, and making sure its reloaded each time is to do it this way... the U variable pretty much guarantees a random string each time its loaded. image.jpg?".date("U")." Regards Chris Aitken The Web Hub Designer and Programmer Phone : 02 4648 0808 Mobile : 0411 132 075 ------------------------------------------------- Making The Web Work........ The Web Hub http://www.thewebhub.com.au/ chris@thewebhub.com.au ------------------------------------------------- Confidentiality Statement: This message is intended only for the use of the Addressee and may contain information that is PRIVILEDGED and CONFIDENTIAL. If you are not the intended recipient, dissemination of this communication is prohibited. If you have received this communication in error, please erase all copies of the message and its attachments and notify us immediately. |
|
|||
|
Tijnema wrote:
> On 7/26/07, Dan <frozendice@gmail.com> wrote: > >> I have a situation where there is a single image let's call it >> somebody.jpg. >> I want to be able to dynamicly create this image using php, basicilly >> I have >> PHP set to handle .jpg files also, so I then go through and create an >> image >> based upon some info I get from a database call and then use >> header('Content-Type: image/jpeg'); >> passthru($file); >> to send the image to the user. >> >> My problem is once they view the image their browser "helpfully" >> caches it >> so they don't have to download it again. >> >> Is there any tactic short of changing the name constantly of the image to >> avoid browser caching of an image? >> >> - Dan > > > Solution 1: > Send a header() that avoids caching (can't remember it exactly) You can try: header('Cache-Control: no-store, no-cache, must-revalidate, Post-Check=0, Pre-Check=0'); brian |
|
|||
|
On 7/27/07, brian <phplist@subtropolix.org> wrote:
> Tijnema wrote: > > On 7/26/07, Dan <frozendice@gmail.com> wrote: > > > >> I have a situation where there is a single image let's call it > >> somebody.jpg. > >> I want to be able to dynamicly create this image using php, basicilly > >> I have > >> PHP set to handle .jpg files also, so I then go through and create an > >> image > >> based upon some info I get from a database call and then use > >> header('Content-Type: image/jpeg'); > >> passthru($file); > >> to send the image to the user. > >> > >> My problem is once they view the image their browser "helpfully" > >> caches it > >> so they don't have to download it again. > >> > >> Is there any tactic short of changing the name constantly of the image to > >> avoid browser caching of an image? > >> > >> - Dan > > > > > > Solution 1: > > Send a header() that avoids caching (can't remember it exactly) > > You can try: > > header('Cache-Control: no-store, no-cache, must-revalidate, > Post-Check=0, Pre-Check=0'); > > brian That's HTTP/1.1 only, but this is what I got from PHP site: <?php header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past ?> Tijnema -- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
|
|||
|
>> header('Cache-Control: no-store, no-cache, must-revalidate,
>> Post-Check=0, Pre-Check=0'); >> >> brian > >That's HTTP/1.1 only, but this is what I got from PHP site: ><?php >header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 >header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past >?> > But wouldn't that make every image on the page be uncached and reloaded each time? Not very efficient if the shell of the site keeps getting loaded if only 1 or 2 images need to be forced. Regards Chris Aitken The Web Hub Designer and Programmer Phone : 02 4648 0808 Mobile : 0411 132 075 ------------------------------------------------- Making The Web Work........ The Web Hub http://www.thewebhub.com.au/ chris@thewebhub.com.au ------------------------------------------------- Confidentiality Statement: This message is intended only for the use of the Addressee and may contain information that is PRIVILEDGED and CONFIDENTIAL. If you are not the intended recipient, dissemination of this communication is prohibited. If you have received this communication in error, please erase all copies of the message and its attachments and notify us immediately. |
|
|||
|
On 7/27/07, Chris Aitken <chris@thewebhub.com.au> wrote:
> >> header('Cache-Control: no-store, no-cache, must-revalidate, > >> Post-Check=0, Pre-Check=0'); > >> > >> brian > > > >That's HTTP/1.1 only, but this is what I got from PHP site: > ><?php > >header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 > >header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past > >?> > > > > But wouldn't that make every image on the page be uncached and reloaded each > time? Not very efficient if the shell of the site keeps getting loaded if > only 1 or 2 images need to be forced. > > > > > Regards > > > Chris Aitken > The Web Hub Designer and Programmer > Phone : 02 4648 0808 > Mobile : 0411 132 075 > Yes, that depends on which way it is used, I wouldn't recommend loading images from the database that don't get changed... And you can of course also use an if-statement/switch-statement/in_array function in your image.php script, like this: $img = $_GET['img']; if($img == "test_a.jpg" || $img == "test_b.jpg") { header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past } OR: $img = $_GET['img']; switch($img) { case "test_a.jpg": case "test_b.jpg": header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past } OR: $img = $_GET['img']; $noncached_images = array("test_a.jpg","test_b.jpg"); if(in_array($img,$noncached_images)) { header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past } Tijnema -- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
|
|||
|
Is this header you're refering to the header of the page which contains the
image, or the image itself? - Dan "Tijnema" <tijnema@gmail.com> wrote in message news:d8269d910707261527o7ac08edap61802a712fbac7da@ mail.gmail.com... > On 7/27/07, brian <phplist@subtropolix.org> wrote: >> Tijnema wrote: >> > On 7/26/07, Dan <frozendice@gmail.com> wrote: >> > >> >> I have a situation where there is a single image let's call it >> >> somebody.jpg. >> >> I want to be able to dynamicly create this image using php, basicilly >> >> I have >> >> PHP set to handle .jpg files also, so I then go through and create an >> >> image >> >> based upon some info I get from a database call and then use >> >> header('Content-Type: image/jpeg'); >> >> passthru($file); >> >> to send the image to the user. >> >> >> >> My problem is once they view the image their browser "helpfully" >> >> caches it >> >> so they don't have to download it again. >> >> >> >> Is there any tactic short of changing the name constantly of the image >> >> to >> >> avoid browser caching of an image? >> >> >> >> - Dan >> > >> > >> > Solution 1: >> > Send a header() that avoids caching (can't remember it exactly) >> >> You can try: >> >> header('Cache-Control: no-store, no-cache, must-revalidate, >> Post-Check=0, Pre-Check=0'); >> >> brian > > That's HTTP/1.1 only, but this is what I got from PHP site: > <?php > header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 > header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past > ?> > > Tijnema > > -- > Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
|
|||
|
On 7/27/07, Dan <frozendice@gmail.com> wrote:
> Is this header you're refering to the header of the page which contains the > image, or the image itself? > > - Dan The image itself. Also note, that if you use my solution 2, you still might get problems, as the page that is calling might be cached, and in the cached page, it refers to the image with the same unique code, and it will use the cached image again. Also, if you use solution 2, the image will still stay forever in the temp folder of the browser(unless the user is cleaning it). If you use solution 1, the browser will keep it only for this page, and will remove it afterwards. Tijnema > > "Tijnema" <tijnema@gmail.com> wrote in message > news:d8269d910707261527o7ac08edap61802a712fbac7da@ mail.gmail.com... > > On 7/27/07, brian <phplist@subtropolix.org> wrote: > >> Tijnema wrote: > >> > On 7/26/07, Dan <frozendice@gmail.com> wrote: > >> > > >> >> I have a situation where there is a single image let's call it > >> >> somebody.jpg. > >> >> I want to be able to dynamicly create this image using php, basicilly > >> >> I have > >> >> PHP set to handle .jpg files also, so I then go through and create an > >> >> image > >> >> based upon some info I get from a database call and then use > >> >> header('Content-Type: image/jpeg'); > >> >> passthru($file); > >> >> to send the image to the user. > >> >> > >> >> My problem is once they view the image their browser "helpfully" > >> >> caches it > >> >> so they don't have to download it again. > >> >> > >> >> Is there any tactic short of changing the name constantly of the image > >> >> to > >> >> avoid browser caching of an image? > >> >> > >> >> - Dan > >> > > >> > > >> > Solution 1: > >> > Send a header() that avoids caching (can't remember it exactly) > >> > >> You can try: > >> > >> header('Cache-Control: no-store, no-cache, must-revalidate, > >> Post-Check=0, Pre-Check=0'); > >> > >> brian > > > > That's HTTP/1.1 only, but this is what I got from PHP site: > > <?php > > header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 > > header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past > > ?> > > > > Tijnema > > > > -- > > Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
|
|||
|
Well, this is only one specific image that constantly changes, the rest of
the page is handled regularly. From what you've said if I go with this header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past That will effect only the one specific image I use this on when generating it right? - Dan "Tijnema" <tijnema@gmail.com> wrote in message news:d8269d910707261632k2d649476l102453e93eabf34d@ mail.gmail.com... > On 7/27/07, Dan <frozendice@gmail.com> wrote: >> Is this header you're refering to the header of the page which contains >> the >> image, or the image itself? >> >> - Dan > > The image itself. > > Also note, that if you use my solution 2, you still might get > problems, as the page that is calling might be cached, and in the > cached page, it refers to the image with the same unique code, and it > will use the cached image again. > > Also, if you use solution 2, the image will still stay forever in the > temp folder of the browser(unless the user is cleaning it). If you use > solution 1, the browser will keep it only for this page, and will > remove it afterwards. > > Tijnema >> >> "Tijnema" <tijnema@gmail.com> wrote in message >> news:d8269d910707261527o7ac08edap61802a712fbac7da@ mail.gmail.com... >> > On 7/27/07, brian <phplist@subtropolix.org> wrote: >> >> Tijnema wrote: >> >> > On 7/26/07, Dan <frozendice@gmail.com> wrote: >> >> > >> >> >> I have a situation where there is a single image let's call it >> >> >> somebody.jpg. >> >> >> I want to be able to dynamicly create this image using php, >> >> >> basicilly >> >> >> I have >> >> >> PHP set to handle .jpg files also, so I then go through and create >> >> >> an >> >> >> image >> >> >> based upon some info I get from a database call and then use >> >> >> header('Content-Type: image/jpeg'); >> >> >> passthru($file); >> >> >> to send the image to the user. >> >> >> >> >> >> My problem is once they view the image their browser "helpfully" >> >> >> caches it >> >> >> so they don't have to download it again. >> >> >> >> >> >> Is there any tactic short of changing the name constantly of the >> >> >> image >> >> >> to >> >> >> avoid browser caching of an image? >> >> >> >> >> >> - Dan >> >> > >> >> > >> >> > Solution 1: >> >> > Send a header() that avoids caching (can't remember it exactly) >> >> >> >> You can try: >> >> >> >> header('Cache-Control: no-store, no-cache, must-revalidate, >> >> Post-Check=0, Pre-Check=0'); >> >> >> >> brian >> > >> > That's HTTP/1.1 only, but this is what I got from PHP site: >> > <?php >> > header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 >> > header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past >> > ?> >> > >> > Tijnema >> > >> > -- >> > Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info >> >> -- >> PHP General Mailing List (http://www.php.net/) >> To unsubscribe, visit: http://www.php.net/unsub.php >> >> > > > -- > Vote for PHP Color Coding in Gmail! -> http://gpcc.tijnema.info |
![]() |
| Thread Tools | |
| Display Modes | |
|
|