Veröffentlicht 3. September 200619 j Hallo zusammen, ich habe eine Seite, in der ich via PHP Bilder generiere. Mir kommt es so vor, als würden die Browser diese generierten Bilder nicht cachen... Kann ich das irgendwie kontrollieren? Muss ich evtl irgendeinen bestimmten Header senden, damit der Browser das ganze cached? Gruß, Markus
3. September 200619 j GD generiert images on-the-fly - das lässt sich aber z.b. umgehen, indem bilder bei vorhandensein aus einem verzeichnis geladen werden, andernfalls zuerst generiert und dann im cache abgelegt werden: <?php // set the PNG header type for the request header("Content-Type: image/png"); // see if a width and height for the image have been provided in GET VARS // if not, use some defaults if ($_GET["logo_width"]){ $width = $_GET["logo_width"]; $height = $_GET["logo_height"]; }else{ $width = 466; $height = 100; } // now check if an image created for of these dimensions // is in the image cache // if not, then we will have to make a new one $image_path = "../image-cache/logo_".$width."x".$height.".png"; if (file_exists($image_path)) { // send the cached image to the output buffer (browser) readfile($image_path); }else{ // create a new image using GD functions // the original PNG logo image $image = ImageCreateFromPNG('logo.png'); // the new image we will create with GD to the new dimensions $new_image = ImageCreateTrueColor($width,$height); // copy and re-sample the original image to make the new one ImageCopyResampled($new_image, $image, 0, 0, 0, 0, $width, $height, 466, 100); // send the new image to the browser ImagePNG($new_image); // now save a copy of the new image to the cache directory ImagePNG($new_image, $image_path); // destroy the image in memory to free up server resources ImageDestroy($new_image); } [/PHP] s'Amstel
4. September 200619 j Hi Amstel, danke für die Info, aber das ist mir schon alles bewusst... Nur kommt mir so vor, auch wenn die Datei gecached auf dem Server liegt, dass der Browser diese trotzdem nicht cached. Der Browser cached ja die Bilder normalerweise, aber wie gesagt, wenn diese mit PHP generiert sind anscheinend nicht... Evtl hilft da nen header() ? Wie man die Gd-Lib verwendet ist mir bewusst... Gruß, Markus
4. September 200619 j Sorry, bin gerade etwas faul. Also nur ein Link: http://www.faqs.org/rfcs/rfc2616 (Abschnitt: 14.9 Cache-Control)
8. September 200619 j Hi, Ich vermute, wenn ich den Last-Modified Header mitschicke, müsste der Browser selbst entscheiden können, ob er cached oder nicht, oder wie seht ihr das? Das mit dem Cache-Control bringt mich glaub ich nicht weiter. Gruß, Markus
8. September 200619 j Ich denke mal, dass das wirklich das sinvollste ist. Du kannst ja auch den HTTP-Code mitschicken, NOT MODIFIED.
11. September 200619 j d.h. ich muss einen 304 Header schicken ala header("HTTP/1.0 304 Not Modified"); ?
11. September 200619 j Genau, allerdings sollest ggf. die Versionsnummer anpassen. Dann kannst du auch die Vorteile von HTTP 1.1 nutzen.
11. September 200619 j Hi, Danke für die Antwort! Aktuell siehst jetzt so aus: header('Content-Type: image/'.$thumb->img['format']); header('HTTP/1.1 304 Not Modified'); header('Last-Modified: '.gmdate('D, d M Y H:i:s', $cachetime)); readfile($cachepath);[/php] Macht es jetzt überhaupt noch Sinn, noch den Last-Modified-Header mitzuschicken? Dann kannst du auch die Vorteile von HTTP 1.1 nutzen. Die da wären? Gruß, Markus
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.