Apache Ausgabepuffer abschalten / leeren

Alles, was den Apache betrifft, kann hier besprochen werden.

Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 12:22

Hallo Forum,
kennt jemand eine Möglichkeit unter Windows den Ausgabepuffer von Apache abzuschalten? Ich habe dazu zwar schon so einiges im Web gefunden. Nur war die einzige Info, die ich bisher gefunden habe, dass Apache unter Linux ohne Puffer und unter Windows mit Puffer läuft. Also muss der Puffer doch irgendwie abgeschaltet werden können, oder?

Kurz zu dem warum:
Ich habe ein sehr lange laufendes PHP Script (läuft mehrere Tage). In meiner Entwicklungsumgebung (eigener Server) läuft es problemlos. Dort gibt es kiene Browser-Timeouts und keine Ausgabepuffer. Rufe ich das Script über einen Browser und Apache auf, wird das Script durch einen Timeout beendet. Den php-Timeout habe ich per Befehl umgangen, für den IE habe ich den Timeout in der regestry auf 5 Tage erhöht und bei Apache habe ich die folgenden Zeilen in der httpd.conf geändert: Timeout 432000 und eepAliveTimeout 432000. Leider kam trotzdem ein Timeout. Ich habe auch schon versucht php über die Dos-Konsole zu starten. Aber auch hier tritt ein Problem auf (CLI hat ein Problem festgestellt). Als letzte Lösung fiel mir noch einen, eine Ladestandsanzeige oder ähnliches regelmäßig per flush an der Browser zu schicken. Offensichtlich leitet Apache dies aber nicht weiter, sondern puffert selbst bis zum Ende des Scripts ==> Timeout.

Wär super, wenn jemand einen Tipp für mich hat.

Vielen Dank schonmal.

Viele Grüße, hamperer
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby Xardas der Dunkle » 09. June 2009 12:36

Wieso schreibt man in PHP ein Script das mehrere Tage läuft?
Dafür gibt es echte Programmiersprachen wie C++ oder Java.

Für den Ausgabepuffer gibt es die PHP-Funktion flush.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 12:43

Mir ist klar, dass eine andere Sprache vielleicht sinnvoller gewesen wäre, aber ich kann halt nunmal nur php. Und das Script läuft ja auch wunderbar. Insofern ist die Sprache ja egal. Hauptsache es macht, was ich will.
Zu flush: wie beschrieben, habe ich flush benutzt. flush leert aber nur den php-Ausgabepuffer. Nicht den von Apache. Deswegen läuft das Script ja auch in meiner Entwicklungsumgebung und nicht unter Apache.

Trotzdem vielen Dank für die Antwort.

Viele Grüße, hamperer
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby Wiedmann » 09. June 2009 12:49

Ich habe auch schon versucht php über die Dos-Konsole zu starten. Aber auch hier tritt ein Problem auf (CLI hat ein Problem festgestellt).

Das ist dann aber ein anderes Problem. Shell-Scripte sollten ohne Probleme laufen. (und dürfte hier ja das gewollte sein, anstatt ein Aufruf über den Browser)

Rufe ich das Script über einen Browser und Apache auf, wird das Script durch einen Timeout beendet.

Trenne einfach gleich am Anfang des Scriptes die Verbindung zum Client.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Apache Ausgabepuffer abschalten / leeren

Postby Xardas der Dunkle » 09. June 2009 13:02

Ich habe mal irgendwann einen PHP-Chat der auf basis von flush() arbeitete geschrieben. Dieser lief auch unter Windows, ich hatte keinerlei Probleme mit irgendwelchen Apache-Timeouts.
Das einzige Problem war das der Browser ziemlich viel CPU-Leistung fraß und dadurch auch teilweise abstürzte.

Ich würde auch wirklich versuchen das Script auf die Konsole zu verlagern. Da hängt kein störender Webserver und vor allem kein Browser dazwischen!
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 13:06

Wiedmann wrote:Das ist dann aber ein anderes Problem. Shell-Scripte sollten ohne Probleme laufen. (und dürfte hier ja das gewollte sein, anstatt ein Aufruf über den Browser)

Richtig. das wäre mir sehr recht, wenn das funktionieren würde. Aber wie gesagt, endet das nach ein paar Minuten in einer Fehlermeldung. Ich habe das auch schon hier gepostet: http://www.selfphp.de/forum/showthread.php?t=21558 Leider hatte wohl keiner eine Antwort.

Wiedmann wrote:Trenne einfach gleich am Anfang des Scriptes die Verbindung zum Client.

Mir ist nicht klar, was das bedeutet bzw. wie das geht. Ich dachte das Script hängt immer am aufrufenden Medium (hier Browser). Kannst Du mir einen Tipp geben?
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby Wiedmann » 09. June 2009 13:13

Aber wie gesagt, endet das nach ein paar Minuten in einer Fehlermeldung.

Hast du mal debugged, was diese Fehlermeldung verursacht?

Mir ist nicht klar, was das bedeutet bzw. wie das geht. Ich dachte das Script hängt immer am aufrufenden Medium (hier Browser). Kannst Du mir einen Tipp geben?

Du schickst halt gleich am Anfang ein "Connection: close" zum Client und beendest die PHP Ausgabe-Buffer.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 13:23

Wiedmann wrote:Hast du mal debugged, was diese Fehlermeldung verursacht?

Wie debugge ich denn in der Konsole? Damit kenne ich mich nun gar nicht aus.

hamperer wrote:Du schickst halt gleich am Anfang ein "Connection: close" zum Client und beendest die PHP Ausgabe-Buffer.

Das macht man per header, oder? Ich habe es auch schonmal mit
Code: Select all
header('HTTP/1.1 102 Processing');
versucht. Aber ich vermute mal, dass das auch nicht beim Client ankam. Ich wüsste aber auch nicht, wie ich das überprüfen sollte.
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby Wiedmann » 09. June 2009 13:27

Wie debugge ich denn in der Konsole?

Wie machst du es denn im Browser?

Ich habe es auch schonmal mit
Code: Select all
header('HTTP/1.1 102 Processing');

versucht. Aber ich vermute mal,

Das ist aber was anderes als ein "Connection: close".

(BTW: 102 gibt es eh nicht. 202 könnte man aber als Parameter für header() verwenden).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 13:39

Wiedmann wrote:Wie machst du es denn im Browser?

Das Script debugge ich in phped. Im Browser taucht ja ohnehin nichts auf. Es gibt im Script keine Ausgabe an den Browser. Eigentlich werden nur Webseiten aufgerufen, analysiert und dann Daten in eine MySQL Datenbank geschrieben. Das hätte ich aber geändert um einen Ladebalken auszugeben. Wäre ohnehin praktisch zu sehen, wie weit das Script ist ohne ständig in phpmyadmin reinzugehen. Aber in phped läuft das Script problemlos.

hamperer wrote:Du schickst halt gleich am Anfang ein "Connection: close" zum Client und beendest die PHP Ausgabe-Buffer.

Das habe ich eben mal ausprobiert. Der Browser wartet wie üblich eine Weile auf Ergebnisse. Dann meldet er nach einer Weile nur Fertig. Es kommt kein Timeout. Aber das Script stoppt trotzdem.
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 18:37

So ich habe jetzt gerade SUSE Linux auf einem Testrechner mit XAMPP installiert. Und siehe da: hier ist der Ausgabepuffer von Apache tatsächlich deaktiviert. Ich bin zwar noch nicht dazu gekommen, mein Script zu testen. Aber ich habe auf meinem Windowsrechner und auf Linux den folgenden Ladebalken (funktioniert über den php Befehl flush) getestet: http://www.bongard.net/blog/2007/04/18/php-progressbar_fortschrittsbalken/ Auf meinem Windowsrechner funktionierts, wie gesagt, nicht. Hier lädt der Browser, bis die Abschlußseite angezeigt wird. Der Ladebalken wird nicht dargestellt. Unter Linux wird der Ladebalken korrekt dargestellt. Flush funktioniert. Ob ich mein Script damit am "Leben" halten kann, weiß ich noch nicht. ABer ich werde es berichten, wenn es klappt.

Trotzdem folgende Frage, weil ich das ganze eigentlich lieber unter Windows laufen lassen würde: Ich habe auf meinem Windows-System Apache, php und mysql "manuell" installiert (nach Anleitung aus einem Buch) und nicht XAMPP. Kann es sein, dass Apache in XAMPP grundsätzlich anders eingerichtet ist, so dass das auch unter Windows läuft?
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby Xardas der Dunkle » 09. June 2009 19:39

Vielleicht hilft auch diese Funktion: http://de3.php.net/manual/de/function.i ... -abort.php
Die verhindert, das wenn der Benutzer auf den Stop-Button des Browsers klickt eben auch das PHP-Script gestoppt wird.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 20:07

Auch XAMPP auf einem jungfräulichen Windows XP habe ich jetzt getestet. Leider wird der Ladebalken nicht angezeigt. Es liegt also nicht an meiner Apacheinstallation.

Xardas der Dunkle wrote:Vielleicht hilft auch diese Funktion: http://de3.php.net/manual/de/function.i ... -abort.php
Die verhindert, das wenn der Benutzer auf den Stop-Button des Browsers klickt eben auch das PHP-Script gestoppt wird.

Danke für die Idee. Auch das werde ich nachher mal testen, wenn mich meine Frau wieder an den Rechner lässt. :lol:
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26

Re: Apache Ausgabepuffer abschalten / leeren

Postby hamperer » 09. June 2009 20:29

So das habe ich getestet, aber damit gehts leider auch nicht...

Jetzt werde ich mal all das im Linuxsystem versuchen... Vielleicht läufts ja da.
hamperer
 
Posts: 8
Joined: 09. June 2009 11:26


Return to Apache

Who is online

Users browsing this forum: No registered users and 16 guests