PHP Ausgabe in Datei umleiten. Auch im Fehlerfall!

gaunt

Lt. Commander
Registriert
Aug. 2007
Beiträge
2.016
Hi
ich kann ja den Output Buffer in eine Variable und somit auch in eine Datei schreiben. Soweit so gut.
Das Schreiben erfolgt aber am Ende des Scripts. Tritt ein Fehler auf und das Script stoppt landet der OB Inhalt im Nirvana.

Hat einer ne Idee wie ich wirklich alle Ausgaben, also auch Fehlermeldungen, eines Scripts in eine Datei schreiben kann?

???
 
Einfache Vorgehensweise: Mit Exceptions arbeiten, abfangen und mitloggen. So bekommst du wirklich jeden Runtime-Fehler mit.
 
Also eine Shutdown Funktion anlegen, in der die letzte Fehlermeldung oder eben gleich den ganzen Buffer wegschreiben?
Würde beim aktuellen Projekt viel helfen... Hört sich gut an... Das probiere ich mal aus...

Allerdings sind Speicherprobleme in einem anderen Projekt mein Problem. Ich ziehe Daten über eine WS Schnittstelle. Und das verdammte Ding ist: Mal läuft alles fehlerfrei durch und mal hängt sich das Script auf weil memory limit überschritten wird. Der selbe Aufruf geht wenige Sekunden später problemlos durch und liefert das gewünschte Ergebnis...
Das dumme ist: Wenn das Script wegen Speicherproblemen stoppt kann ich auch nicht mehr schauen was ich denn da eben bekommen hab:-(
 
Bei Memory Limit hast du wohl keine Chance. Da hilft nur: Limit erhöhen.
Lässt du das Script über einen Webserver oder per CLI laufen? CLI hat z.B. zumindest keinen Timeout.
 
Aktuell teste ich über einen Browser Aufruf, später wirds über einen Cron CLI Aufruf gestartet.
Timeouts habe ich aktuell nicht. Bzw. ich kann ja die Laufzeit erhöhen.

Limit erhöhen kann ich nicht. Ich habe keinen Zugriff auf die Server. 128MB sind gesetzt und nicht verhandelbar:-(
Mag sein das das über ini set geht. Aber wenn das einer mitbekommt werde ich geteert und gefedert;-)

Das Server Log hilft mir nur bedingt. Wie schon gesagt habe ich keinen Zugriff auf den Server an sich. Dazu kommt das (soweit ich das weiß) etliche Webserver (15-20) über ein Varnish angesprochen werden. Und jeder schreibt sein eigenes Log. Ich kann also nie wissen, auf welchem gerade mein Script ausgeführt wurde. Die Server Futzies können mir leider auch nur im Einzelfall mal helfen, da die selber vor Arbeit nicht wissen wo ihnen der Kopf steht. Aber von denen weiß ich das ich ein Speicherproblem habe...

Exceptions nutze ich. Zumindest in eigenen Scripten. In den beiden Fällen hier habe ich aber Scripte von Leuten übernommen die nichtmehr greifbar sind. Ich müsste es also überall nachziehen. Dafür fehlt mir die Zeit.
Ein Memory Limit würde aber auch nicht wirksam abgefangen, oder wie soll ich mit einem Objekt arbeiten (z.B. wegschreiben) was so groß ist das es mein Script gestoppt hat?
 
Ja, da hilft wohl nichts außer memory_limit erhöhen oder Skripte optimieren.
Ergänzung ()

Ich muss die Aussage aus meinem ersten Post revidieren.
Anscheinend werden Shutdown Functions auch nach Erreichen des memory_limits ausgeführt. Es sieht so aus, als ob der ausgeführte Code innerhalb dieser Funktionen noch einmal die selbe Menge Speicher belegen darf.
 
Zuletzt bearbeitet:
Zurück
Oben