Ich kämpfe nun schon seit längerem mit einem Speicherzugriffsfehler (Segmentation fault) in einem PHP script das mehrmals stündlich läuft. Das Script hat die Aufgabe Bilder aus einen Verzeichnis abzuholen, per Imagemagic ein Thumbnail zu erstellen und beides zusammen in ein anderes Verzeichnis abzulegen.
Der Fehler trat nicht immer, aber dennoch häufig auf und da ich per Mail über alle Fehler auf dem Server informiert werden wollte bekam ich entsprechend viele Mails.
Das ganze läuft auf einem Centos 5.11 mit PHP 5.1.6. Viele Versuche haben nicht wirklich eine Erkenntnis gebracht bis ich endlich heute herausgefunden habe wie ich den Fehler beheben kann. Dazu habe ich zunächst über xdebug genauer analysiert in welcher Zeile der Fehler auftritt. Selbst das war problematisch, da ich zunächst raus finden musste welche Version xdebug ich brauchte. Letztendlich haben diese Befehle die Installation erfolgreich abgeschlossen:
yum install php-devel
yum install php-pear
yum install gcc gcc-c++ autoconf automake
pecl install xdebug-2.1.0
Dann den Apache neu gestartet weil die Installation von xdebug den durcheinander gebracht hatte und ich konnte mein Script testen.
php -d xdebug.auto_trace=ON -d xdebug.trace_output_dir=/var/log/xdebug/ meinscript
Dadurch fiel mir auf das der Speicherzugriffsfehler beim Beenden des Scripts auftrat. Egal wo ich ein exit einbaute, genau dann kam der Fehler. Wenn ich überhaupt kein exit eingebaut habe kam der Fehler am Ende des Scripts.
Letztendlich hat eine recht einfache Lösung das Problem behoben: Ein die() am Ende des Scripts.
Wenn hier jemand mir erklären kann warum dem so ist immer her damit, für mich ist erstmal wichtig das der Fehler nicht mehr kommt.