2013-12-15 14 views
8

[SOLVED]PHP/Apache đâm vào kịch bản (lỗi Segmentation (11)

Tôi đang chạy một kịch bản PHP (với một số bao gồm) trên localhost mà giữ đâm trước khi kết thúc.

Lỗi báo cáo là trên Opera, Safari và Firefox trả về một màn hình trống Nhưng Chrome trả về:..

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

Apache đăng nhập trở lại:

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

Đã sử dụng PHP 5.5.6 khi tôi gặp sự cố lần đầu tiên Sau khi hạ cấp xuống PHP 5.4.21, sự cố vẫn tồn tại.

Sự cố không nằm trong tập lệnh. Nhận xét ngẫu nhiên một vài dòng mã giúp giải quyết vấn đề. Làm cho tôi tự hỏi liệu kịch bản của tôi có thể dài để thực hiện hay không.

Có ai có bất kỳ đề xuất nào về cách tôi có thể giải quyết vấn đề này không?

UPDATE:

Vấn đề không chỉ xuất hiện trên localhost mà còn trên máy chủ web của tôi chạy trên CentOS 6.4 và PHP 5.3.3 cho các lỗi tương tự trên Apache.

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

UPDATE2:

Chạy php từ dòng lệnh cho phép:

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

Sau khi đặt một bình luận trước khi dòng 135 trên Encrypt.class.php

$ php index.php
Segmentation fault: 11

UPDATE3: (Giải pháp)

Sau khi chạy chỉ mục trên dòng lệnh với strace (strace php index.php) tôi đã tìm thấy sự cố tại một trong các truy vấn.

Sau khi một số gỡ lỗi khác (sử dụng PDO thay vì lớp của riêng tôi), tôi phát hiện ra rằng sự cố đã đặt tùy chọn PDO của riêng tôi "ATTR_PERSISTENT => true". Vô hiệu hóa tùy chọn này đã giải quyết được sự cố của tôi.

+1

Thử chạy tập lệnh từ dòng lệnh. Nếu nó ném một lỗi phân đoạn, phiên bản PHP của bạn cần phải được cài đặt lại. Nếu nó chạy tốt từ dòng lệnh, thì có lẽ bạn nên cài đặt lại Apache. Dòng mã nào đang ném chính xác lỗi này. Bạn có biết? –

+0

@MisterMelancholy chạy tệp trên dòng lệnh cung cấp "Lỗi nghiêm trọng" Gọi hàm không xác định mcrypt_create_iv() trong Encrypt.class.php trên dòng 135. Hàm này hoạt động tốt trong trình duyệt. Không có dòng cụ thể nào cho lỗi. – webecreative

+0

Khi bạn hạ cấp PHP, bạn có chắc là tất cả các tệp mở rộng .so cũng bị hạ cấp không? Có lẽ bạn đang sử dụng một phần mở rộng PHP mcrypt 5 PHP với PHP 5.4 hoặc 5.3 (và không bao gồm nó ở tất cả trong bất kỳ php.ini CLI của bạn đọc từ) – Brad

Trả lời

3

UPDATE3: (Giải pháp)

Tùy chọn Persisten của PDO đã phá vỡ hiệu suất của tôi thật đáng buồn.

Tìm giải pháp với strace: Sau khi chạy chỉ mục trên dòng lệnh với strace (strace php index.php) Tôi đã tìm thấy sự cố tại một trong các truy vấn.

Sau khi tách truy vấn, tôi đã thay thế lớp của mình bằng PDO mặc định. Thêm các tùy chọn cho lớp của tôi cho đến khi nó bị phá vỡ lần nữa: Sau khi gỡ lỗi thêm (sử dụng PDO thay vì lớp của riêng tôi), tôi đã phát hiện ra rằng vấn đề đã được đặt tùy chọn PDO của riêng tôi "ATTR_PERSISTENT => true". Vô hiệu hóa tùy chọn này đã giải quyết được sự cố của tôi.

Các vấn đề liên quan