phpbar.de logo

Mailinglisten-Archive

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

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

"Mario Haßler" M.Hassler at gmx.de
Mi Jul 13 13:06:53 CEST 2011


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