Mailinglisten-Archive |
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