2013-12-15 10 views
8

[gelöst]PHP/Apache auf Skript Absturz (Segmentation fault (11)

Ich bin ein PHP-Skript ausgeführt wird (mit einigen enthält) auf localhost, die vor dem Ende andauernd abstürzt.

Fehler Berichterstattung ist auf Opera, Safari und Firefox einen leeren Bildschirm zurück Aber Chrome zurück:..

Unable to load the webpage because the server sent no data. Error code: ERR_EMPTY_RESPONSE

Apache protokolliert kehrt:

[Sun Dec 15 19:29:23 2013] [notice] child pid 34267 exit signal Segmentation fault (11)

Wurde PHP 5.5.6 verwendet, als ich das Problem zum ersten Mal fand Nach dem Downgrade auf PHP 5.4.21 ist das Problem immer noch vorhanden.

Das Problem liegt nicht im Skript. Das zufällige Auskommentieren von ein paar 50 Zeilen Code löst das Problem. Ich frage mich, ob mein Skript für die Ausführung zu lang sein könnte.

Hat jemand irgendwelche Vorschläge, wie ich dieses Problem lösen kann?

UPDATE:

Problem nicht nur auf dem lokalen Host erscheint, sondern auch auf meinem Webserver auf CentOS läuft 6.4 und PHP 5.3.3 die gleichen Fehler auf Apache geben.

[Sun Dec 15 23:15:10 2013] [notice] child pid 18409 exit signal Segmentation fault (11)

UPDATE2:

mit PHP von der Kommandozeile gibt:

$ php index.php Fatal error: Call to undefined function mcrypt_create_iv() in Encrypt.class.php on line 135

Nach Kommentar vor Zeile 135 auf Encrypt.class.php Platzierung

$ php index.php
Segmentation fault: 11

UPDATE3: (Lösung)

Nach dem Ausführen des Index auf der Kommandozeile mit strace (strace php index.php) habe ich das Problem bei einer der Abfragen gefunden.

Nach einigen weiteren Debugging (mit PDO anstelle meiner eigenen Klasse) fand ich heraus, dass das Problem war, meine eigene PDO-Option "ATTR_PERSISTENT => true" zu setzen. Das Deaktivieren dieser Option hat mein Problem gelöst.

+1

Versuchen Sie, das Skript über die Befehlszeile auszuführen. Wenn es einen Segmentierungsfehler auslöst, muss Ihre PHP-Version neu installiert werden. Wenn es von der Befehlszeile aus einwandfrei funktioniert, sollten Sie Apache wahrscheinlich neu installieren. Welche Codezeile wirft diesen Fehler genau auf? Wissen Sie? –

+0

@MisterMelancholy Ausführen der Datei auf der Kommandozeile gibt einen "Fatal error" Aufruf der undefinierten Funktion mcrypt_create_iv() in Encrypt.class.php in Zeile 135. Diese Funktion funktioniert gut im Browser. Keine bestimmte Zeile gibt den Fehler an. – webecreative

+0

Wenn Sie PHP heruntergestuft haben, sind Sie sicher, dass alle .so-Dateien der Erweiterung ebenfalls heruntergestuft wurden? Vielleicht verwenden Sie eine PHP 5.5 mcrypt-Erweiterung mit PHP 5.4 oder 5.3 (und schließen Sie sie überhaupt nicht in die php.ini ein, von der Ihre CLI liest) – Brad

Antwort

3

UPDATE3: (Lösung)

Persisten Option von PDO brach traurig genug, um meine Leistung.

Gefunden die Lösung mit strace: Nach dem Ausführen des Index auf der Kommandozeile mit strace (strace php index.php) fand ich das Problem bei einer der Abfragen.

Nach dem Trennen der Abfrage habe ich meine Klasse durch Standard-PDO ersetzt. Hinzufügen von Optionen meiner Klasse, bis sie wieder kaputt ging: Nach etwas mehr Debugging (mit PDO anstelle meiner eigenen Klasse) fand ich heraus, dass das Problem meine eigene PDO-Option "ATTR_PERSISTENT => true" war. Das Deaktivieren dieser Option hat mein Problem gelöst.