2010-04-22 31 views
101

Điều này chưa từng xảy ra trước đây. Thông thường nó sẽ hiển thị lỗi, nhưng bây giờ nó chỉ mang lại cho tôi một lỗi máy chủ nội bộ 500. Tất nhiên trước đó, khi nó hiển thị lỗi, đó là các máy chủ khác nhau. Bây giờ tôi đang ở trên một máy chủ mới (tôi có đầy đủ gốc, vì vậy nếu tôi cần phải cấu hình nó ở đâu đó trong php.ini, tôi có thể.) Hoặc có lẽ một cái gì đó của nó với Apache?Làm thế nào tôi có thể làm cho PHP hiển thị lỗi thay vì cho tôi 500 Lỗi Máy chủ Nội bộ

Tôi đã cài đặt nó bằng cách chỉ chuyển tệp sang máy chủ khác của tôi và chạy tệp đó ở đó để tìm lỗi, nhưng điều đó trở nên quá tẻ nhạt. Có cách nào để sửa lỗi này?

+3

Đó là âm thanh như một vấn đề apache, không một vấn đề PHP. Apache sẽ ném một 500 bất cứ lúc nào nó có vấn đề cấu hình (như cú pháp xấu trong .htaccess). Kiểm tra nhật ký lỗi apache của bạn để xem thông báo lỗi. –

Trả lời

155

Kiểm tra cài đặt error_reporting, display_errorsdisplay_startup_errors trong tệp php.ini của bạn. Chúng phải được đặt thành E_ALL"On" tương ứng (mặc dù bạn không nên sử dụng display_errors trên máy chủ sản xuất, vì vậy, hãy tắt tính năng này và sử dụng log_errors thay thế nếu/khi bạn triển khai nó). Bạn cũng có thể thay đổi các thiết lập (trừ display_startup_errors) ở đầu rất của kịch bản của bạn để thiết lập chúng trong thời gian chạy (mặc dù bạn có thể không nắm bắt tất cả các lỗi theo cách này):

error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

Sau đó, khởi động lại máy chủ.

+1

Làm cách nào để tắt display_errors, nhưng có hiển thị PHP 200 hoặc 404 thay vì 500? – Pacerier

+0

Không chắc chắn nếu nó đã được trong năm 2010 nhưng, bạn không cần phải khởi động lại máy chủ (trừ khi sử dụng một bộ nhớ cache opcode như APC) trong năm 2014. –

+0

Ngay cả sau khi làm tất cả những gì tôi vẫn nhận được lỗi 500 ... có lẽ nó đang đến từ IIS? –

12

Cần lưu ý rằng nếu lỗi của bạn là do .htaccess, ví dụ: một writerite_module bị thiếu, bạn sẽ vẫn thấy lỗi máy chủ nội bộ 500.

+3

Tôi đã thực sự thiếu một mô-đun trên apache. Tôi nhận được rằng bằng cách tìm kiếm các bản ghi lỗi (mặc định cho ubuntu là /var/log/apache2/error.log) –

2

Bật lỗi hiển thị từ mã PHP không hoạt động đối với tôi. Trong trường hợp của tôi, sử dụng NGINX và PHP-FMP, tôi theo dõi tệp nhật ký bằng cách sử dụng grep. Ví dụ, tôi biết tên tập tin mycode.php gây ra lỗi 500, nhưng không biết dòng nào. Từ giao diện điều khiển, tôi sử dụng này:

/var/log/php-fpm# cat www-error.log | grep mycode.php 

Và tôi có kết quả:

[04-Apr-2016 06:58:27] PHP Parse error: syntax error, unexpected ';' in /var/www/html/system/mycode.php on line 1458 

Điều này giúp tôi tìm dòng nơi tôi có lỗi đánh máy.

7

Sử dụng "php -l < tên tệp >" (đó là chữ 'L') từ dòng lệnh để xuất ra lỗi cú pháp có thể khiến PHP ném lỗi trạng thái 500. Nó sẽ ra cái gì đó như:

PHP Parse error: syntax error, bất ngờ '}' trong <filename> trên đường dây 18

+1

Điều này thực sự đã giúp tôi ra! Tail'ing của tôi đăng nhập lỗi sản xuất không có gì, nhưng đá quý này đã làm việc hoàn hảo và hiển thị lỗi cú pháp của tôi và số dòng. Đã gỡ lỗi một tệp Lớp. Cảm ơn! –

0

Hãy cẩn thận để kiểm tra xem

display_errors 

hoặc

error_reporting 

đang hoạt động (không phải là nhận xét) ở một nơi khác trong tệp ini.

Máy chủ phát triển của tôi từ chối hiển thị lỗi sau khi nâng cấp lên Kubuntu 16.04 - Tôi đã kiểm tra php.ini nhiều lần ... hóa ra là có một diplay_errors = off; khoảng 100 dòng bên dưới số

display_errors = on; 

Vì vậy, hãy nhớ số cuối cùng đếm!

0

Nếu mọi thứ khác không thành công, hãy thử di chuyển (tức làtrong bash) tất cả các tập tin và thư mục "đi" và thêm chúng lại một.

Tôi vừa phát hiện ra rằng tệp .htaccess của tôi đã tham chiếu đến tệp .htpasswd không tồn tại. (#silly)

2

Cố gắng không để đi

MAMP > conf > [your PHP version] > php.ini 

nhưng

MAMP > bin > php > [your PHP version] > conf > php.ini 

và thay đổi nó ở đó, nó làm việc cho tôi ...

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