2013-12-15 12 views
8

[SOLVED]PHP/Apache upaść na skrypcie (usterka segmentacji (11)

biegnę skrypt PHP (z pewnymi zawiera) na localhost, że zawiesza się przed końcem.

Błąd raportowanie jest Opera, Safari i Firefox powrócić pusty ekran Ale Chrome zwraca..

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

Apache loguje powroty:

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

Używałem PHP 5.5.6 kiedy napotkałem problem po raz pierwszy Po przejściu na wersję PHP 5.4.21 problem nadal istnieje.

Problem nie znajduje się wewnątrz skryptu. Losowe komentowanie kilku 50 linii kodu rozwiązuje problem. Sprawia, że ​​zastanawiam się, czy mój scenariusz może wystarczyć do wykonania.

Czy ktoś ma jakieś sugestie, w jaki sposób mogę rozwiązać ten problem?

UPDATE:

Problem nie pojawia się nie tylko na localhost, ale także na mój serwer WWW działa na CentOS 6.4, PHP 5.3.3 daje ten sam błąd na Apache.

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

Update2:

Uruchamianie PHP z linii poleceń daje:

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

Po umieszczeniu komentarza przed linią 135 na Encrypt.class.php

$ php index.php
Segmentation fault: 11

UPDATE3: (Rozwiązanie)

Po uruchomieniu indeksu w wierszu poleceń strace (strace php index.php) znalazłem problem przy jednym z zapytań.

Po kilku debugowaniu (przy użyciu PDO zamiast mojej własnej klasy) odkryłem, że problemem było ustawienie mojej własnej opcji PDO "ATTR_PERSISTENT => true". Wyłączenie tej opcji rozwiązało mój problem.

+1

Spróbuj uruchomić skrypt z poziomu wiersza poleceń. Jeśli zgłosi błąd segmentacji, twoja wersja PHP musi zostać ponownie zainstalowana. Jeśli działa dobrze z linii poleceń, prawdopodobnie powinieneś ponownie zainstalować Apache. Która linia kodu dokładnie rzuca ten błąd. Czy wiesz? –

+0

@MisterMelancholy uruchamiając plik w linii poleceń daje "Błąd krytyczny" Wywołanie niezdefiniowanej funkcji mcrypt_create_iv() w Encrypt.class.php na linii 135. Ta funkcja działa poprawnie w przeglądarce. Brak konkretnej linii powoduje błąd. – webecreative

+0

Po obniżeniu PHP, czy jesteś pewien, że wszystkie rozszerzenia .so również zostały obniżone? Być może używasz rozszerzenia PHP 5,0 mcrypt z PHP 5.4 lub 5.3 (i nie wliczając go w ogóle do php.ini, z którego odczytuje Twój CLI) – Brad

Odpowiedz

3

UPDATE3: (Rozwiązanie)

Persisten opcja PDO złamałam wydajność dość smutno.

Znaleziono rozwiązanie z strace: Po uruchomieniu indeksu w linii poleceń z strace (strace php index.php) znalazłem problem przy jednym z zapytań.

Po oddzieleniu zapytania zastąpiłem moją klasę domyślnym CHNP. Dodanie opcji mojej klasy do czasu jej ponownego złamania: Po kolejnym debugowaniu (przy użyciu PDO zamiast mojej własnej klasy) odkryłem, że problem polega na ustawieniu mojej własnej opcji PDO "ATTR_PERSISTENT => true". Wyłączenie tej opcji rozwiązało mój problem.