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