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 16:30:26 CEST 2011


Ich konnte das Problem nun lösen.

> [...] Ich vermute, dass mein Webserver so konfiguriert ist, dass ein
> Benutzer nicht beliebig viele Prozesse von ein und demselben Skript
> anstoßen darf. [...]

Hier lag der Hase im Pfeffer. Genauer: Ein Benutzer (= Besucher der
Seite) darf nicht mehrere Verbindungen zu einem Skript offen haben.
Während ein Skript abgearbeitet wird, bleibt die HTTP-Verbindung offen,
da ja weder PHP noch Apache wissen, ob noch Ausgaben kommen oder nicht.
Das gilt auch für header("Location: ..."), welches zu keiner Reaktion
im Browser führt, solange die Verbindung nicht beendet ist.

Mit header("Connection: close"); kann man die Verbindung beenden. Da
es sich um eine Header-Funktion handelt, kann man freilich keine Inhalte
schicken wie zuletzt von Florian Grell mit readfile(); vorgeschlagen.

Das brauche ich auch nicht, daher bin ich zurück zum ursprünglichen Code
und habe ihn ergänzt:

  header("Location: .../".$filename);
  header("Connection: close");
  ob_flush();

Die Benutzerkommentare auf

  http://www.php.net/manual/de/features.connection-handling.php

haben zudem einige Merkwürdigkeiten aufgezeigt, die belegen, dass der
simple Dreizeiler leider nicht funktioniert. Ohne verstanden zu haben,
was genau das Problem ist, bin ich den dortigen Vorschlägen gefolgt.
Der ganze Code lautet nun:

  ignore_user_abort();
  header("Location: .../".$filename);
  ob_end_clean();
  header("Connection: close");
  ob_start();
  header("Content-Length: 0");
  ob_end_flush();
  flush();
  session_write_close();

Das sieht wild aus, aber so funktioniert alles tadellos. Trotzdem nehme
ich Kommentare, Erläuterungen und Anregungen zur Verbesserung natürlich
gerne entgegen.

Mario Haßler


-- 
NEU: FreePhone - kostenlos mobil telefonieren!			
Jetzt informieren: http://www.gmx.net/de/go/freephone

php::bar PHP Wiki   -   Listenarchive