Segmentation Faults – Der schlimmste aller Fehler ist …
Kommentare

Der Aufruf des Skripts über das Apache-mod_php-Modul führt zur Ausgabe des Vardumps (Listing 2, ausgeführt mit PHP an der Kommandozeile). Da kein Output Buffering (Ausgabezwischenspeicherung) genutzt

Der Aufruf des Skripts über das Apache-mod_php-Modul führt zur Ausgabe des Vardumps (Listing 2, ausgeführt mit PHP an der Kommandozeile). Da kein Output Buffering (Ausgabezwischenspeicherung) genutzt wird, wird die Ausgabe noch an den Browser gesendet, bevor das Skript mit dem Segmentation Fault abbricht. Man kann dieses Verhalten einfach beobachten, indem man vor und nach der mit „Segmentation Fault“ kommentierten Zeile eine Ausgabe einfügt:

<?php ....
echo "Hallo Welt 1 !";
$transported = unserialize(serialize(&#36constructed)); // Segmentation fault.
echo "Hallo Welt 2 !";

Bei der Ausführung über mod_php wird „Hallo Welt 1 !“ noch ausgegeben, „Hallo Welt 2 !“ aber nicht mehr, da vorher schon die Programmausführung mit einem Segmentation Fault abgebrochen wurde. Bei der Verwendung des Output Bufferings ist die leere oder „weiße“ Seite als Antwort auf eine Anfrage ein Indiz für das Auftreten eines Segmentation Faults. Viele Frameworks verwenden das Output Buffering, um damit zum Beispiel HTTP Header erst am Ende der Ausführung gesammelt auszugeben. Wenn die Ausgabe der zwischengespeicherten Daten nicht mehr erfolgen kann, weil zum Beispiel ein Segmentation Fault ausgelöst wurde, wird nur eine leere Antwort an den Anfrager (Browser) zurückgesendet. Wird dem vorherigen Beispiel die Anweisung zum Output Buffering hinzugefügt, zeigt es nach der Ausführung die Listing 3 dargestellte Ausgabe im Browser, und zwar eine leere Seite.

Listing 3: Modifizierte reproduceSegFault.php
<?php ...
ob_start();
echo "Hallo Welt 1 !";
$output = ob_get_content();
ob_end_clean();
$transported = unserialize(serialize($constructed)); // Segmentation fault.
echo $output;

Im Livebetrieb einer Webapplikation sind Segmentation-Fault-Meldungen je nach verwendeter Konfiguration im System-, Webserver- oder einem eigenen PHP-Log zu finden. Eine zeitnahe automatische Auswertung und Aggregation der Log-Dateien hilft, die Auslöser der Fehler zu lokalisieren und sie zu beheben. Es stehen verschiedene Hilfsmittel und Techniken zur Verfügung, um einen schnellen Einblick in die Log-Dateien zu bekommen und automatisiert auf Fehler zu reagieren. Sinnvoll kann zum Beispiel das Sammeln der Logs in einer Datenbank sein, um mit einem Werkzeug wie Papertrail [4] Fehler aggregiert zu sehen. Eine kontinuierliche Überwachung der für das Business wichtigsten Seiten der Applikation mit einem Werkzeug wie LiveTest [5] sichert auch bei einem Update von PHP oder der PHP Extensions die fehlerfreie Auslieferung der Webseiten.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -