2012-07-10 55 views
6

Như đã chỉ ra trong nhiều câu hỏi khác, chuyển display_errors thành Off trong php.ini làm cho máy chủ web trả lời với mã trạng thái 500 Lỗi máy chủ nội bộ thay vì 200 OK khi gặp phải lỗi nghiêm trọng. Tôi thiết lập một thử nghiệm đơn giản với một chức năng không xác định để giải thích các hành vi:Tại sao display_errors thay đổi mã trạng thái HTTP?

php.ini

display_errors = On 

index.php

<?php test(); 

Cung cấp:

Fatal error: Call to undefined function test() 
in D:\xampp\htdocs\index.php on line 1 

hoặc chỉ một trang trống nếu tôi tắt tiếng cuộc gọi chức năng như sau:

<?php @test(); 

Trong cả hai trường hợp trả lời tiêu đề như sau:

HTTP/1.1 200 OK 
Date: Tue, 10 Jul 2012 20:08:22 GMT 
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.8 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

Trong khi thay đổi php.ini để:

display_errors = Off 

Nguyên nhân:

HTTP/1.0 500 Internal Server Error 
Date: Tue, 10 Jul 2012 20:10:35 GMT 
Server: Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.8 
Content-Length: 0 
Connection: close 
Content-Type: text/html 

Ai có thể giải thích cho tôi những underlaying cơ chế làm cho máy chủ web trả lời bằng 500 khi display_errors bị Tắt?

+0

Ngắt liên tục, tôi cho rằng nó sẽ luôn trả lại 500 ngay sau khi có lỗi nghiêm trọng. Tôi cũng muốn biết tại sao ... –

+0

trùng lặp: http://stackoverflow.com/questions/3570747/display-500-error-on-any-error-in-apache –

+0

Điều đó dường như đối với tôi một câu hỏi khác –

Trả lời

6

Lý do là với display_errors = On, về cơ bản bạn yêu cầu PHP cung cấp cho bạn phản hồi HTTP phong nha ngay cả khi có lỗi trong tập lệnh của bạn. Hãy nghĩ về nó như một lớp bổ sung giữa tập lệnh của bạn và câu trả lời. Nó không còn kịch bản của bạn kiểm soát đầu ra, đó là PHP.

Khi bạn bật tùy chọn này, bạn có hiệu lực nói rằng "Nếu có lỗi, vui lòng vẫn cho tôi trang phản hồi HTTP hợp lệ (thậm chí có thể bao gồm đánh dấu phong nha), vì tôi sẽ xem rằng thay vì các bản ghi của tôi. "

với nó thiết lập để Off, phản ứng HTTP nên vô nghĩa, và do đó một 500. với nó On, một lỗi PHP dự kiến, vì vậy yêu cầu trên toàn bộ là không phải 500, mặc dù tập lệnh của bạn không thành công.

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