Mailinglisten-Archive |
header() wird vom Browser interpretiert. Also einfach ein exit; nach dem header() sorgt auf jedenfall dafür, dass der Header gesendet wird. Das sollte die einfachste und schnellste Methode sein. VG Robert On Wed, 13 Jul 2011 13:06:53 +0200, "Mario Haßler" <M.Hassler at gmx.de> wrote: > Hallo allerseits! > > Ich habe in einem Verzeichnis Vorschaubilder von WWW-Seiten. Die > Bilder > werden über ein PHP-Skript angefragt. Das soll: > > 1. Das Vorschaubild mit der header-Funktion sofort ausgeben, falls > es > existiert (egal wie alt es ist). > > 2. Falls das Bild nicht existiert oder älter ist als ein Grenzwert, > soll das Skript das Vorschaubild neu anfordern und speichern. > Dieser Prozess dauert ca. 20 bis 40 Sekunden "Echtzeit". > > 3. Falls es dann immer noch kein Vorschaubild gibt, wird ein "Nicht > gefunden"-Bild ausgegeben, wiederum mit der header-Funktion. > > Hier in groben Zügen der Code dazu: > > <?php > ignore_user_abort(true); > $filename = ...; > > // 1.: > if (file_exists($filename)) { > header("Location: http://.../".$filename); > ob_flush(); > } > > // 2.: > if (!file_exists($filename) || (time()-filemtime($filename) > ...)) > { > ... /* Bilddaten per WWW-Zugriffe einlesen */ > if ($success) { file_put_contents($filename, $data); } > clearstatcache(); > } > > // 3.: > if (!file_exists($filename)) { > header("Location: http://.../nicht_gefunden.png"); } > } > ?> > > Damit das Skript im Fall 1 weiterläuft, nachdem es die Bildadresse > aus- > gegeben hat, habe ich ignore_user_abort(true); verwendet. Die Logik > ist > auf jeden Fall so, dass nur einmal header("Location: ..."); gesendet > wird, entweder gleich am Anfang oder ganz am Ende. > > Das Problem: Wenn das Bild vorhanden ist, jedoch zu alt, wird immer > die > WWW-Abfrage für das neue Bild (2.) abgewartet, bevor das Bild im > Browser > angezeigt wird. Auch der Befehl ob_flush(); hat keine Verbesserung > ge- > bracht. Ich habe auch mal zwei Leerzeilen an die "Location" gehängt: > > header("Location: http://.../".$filename."\n\n"); > > -- ebenfalls ohne Verbesserung. > > Wie kann ich das vorhandene (alte) Bild sofort anzeigen lassen und > das > Skript trotzdem weiter laufen lassen, damit es ein neues Bild > einliest > und speichert? > > Vielen Dank im Voraus für jede Anregung. > > Mario Haßler > > > -- > NEU: FreePhone - kostenlos mobil telefonieren! > Jetzt informieren: http://www.gmx.net/de/go/freephone
php::bar PHP Wiki - Listenarchive