phpbar.de logo

Mailinglisten-Archive

[php] header("Location: ..."); sofort zur Anwendung bringen

[php] header("Location: ..."); sofort zur Anwendung bringen

r.hartung at roberthartung.de r.hartung at roberthartung.de
Mi Jul 13 14:09:03 CEST 2011


 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