2010-02-09 30 views
16

Tôi đang chạy nginx với PHP-FPM. cấu hình nginx tôi để xử lý các file php trông như thế này:PHP FPM trả về HTTP 500 cho tất cả các lỗi PHP

location ~ \.php$ { 
      set $php_root /home/me/www; 
      fastcgi_pass 127.0.0.1:9000; 
      fastcgi_index index.php; 
      fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name; 
      include /etc/nginx/fastcgi_params; 
     } 

Bây giờ, tôi có một file php đơn giản như thế này:

<?php 
    ech "asd" 
    asd"" 
?> 

Vâng, với một lỗi rõ ràng. Khi tôi thử truy cập tệp php, thay vì truy tìm lỗi cú pháp, tôi luôn nhận được lỗi HTTP 500 Internal Server Error.I đã thử sử dụng error_reporting(-1); nhưng vẫn trả về HTTP 500. Làm thế nào để tôi nhận được PHP để in lỗi chính xác thay vì trả lại một HTTP 500 chung?

+0

Nếu tập tin không có lỗi, bạn sẽ nhận được mã phản hồi chính xác (HTTP 200 OK)? – echo

+0

Có, tôi nhận được HTTP 200 OK nếu tệp không có lỗi. – ErJab

+0

Nói chung là tốt hơn để ghi lỗi hơn hiển thị chúng. – umassthrower

Trả lời

29

Cố gắng tìm dòng sau trong php.ini của bạn:

display_errors = Off 

sau đó làm cho nó trên

+0

Cảm ơn bạn! Tôi sử dụng phiên bản sản xuất của php.ini trong đó display_errors bị Tắt. – ErJab

+1

Tôi đã sử dụng tập lệnh PHP-Fastcgi vì vậy khi tôi chuyển sang php-fpm gần đây. Tôi không nhận thấy rằng php.ini đã thay đổi thành phiên bản của FPM. Phiên bản của họ có dispaly_errors = Tắt để tất cả các trang của tôi bắt đầu trống khi xảy ra lỗi! – Xeoncross

+6

đừng quên đặt lại php-fpm sau đó. (sudo service php-fpm restart) – alioygur

8

Để gửi một câu trả lời hoàn thiện hơn, tôi đã sử dụng một phiên bản sản xuất của php.ini trong đó có display_errors = Tắt. Thay vì chuyển nó trên toàn cầu, những gì tôi làm bây giờ là, cho các tập tin mà tôi cần báo cáo lỗi trên, tôi sử dụng ini_set('display_errors', 'On'); ở đầu của tập tin.

+0

Vấn đề với điều đó là theo tài liệu, nó sẽ không hoạt động nếu một lỗi nghiêm trọng xảy ra. – srcspider

+0

@srcspider Không thực sự huh? Ngay cả lỗi nghiêm trọng cũng được chỉ định. Tất cả những gì bạn phải làm chỉ là đảm bảo rằng bạn đặt 'ini_set (' display_errors ',' On ') 'này vào đầu của phạm vi mà bạn đang xem xét. –

4

Ngoài ra tôi đã gặp sự cố và tôi đặt display_errors = Off trong php.ini nhưng không hoạt động. Sau đó, tôi tìm thấy số php[display_errors]=off trong php-fpm.conf và nó sẽ ghi đè giá trị php.ini và nó hoạt động.

+0

'php.ini' không liên quan gì đến cấu hình, nếu bạn đang sử dụng 'php-fpm', trong trường hợp đó bạn sẽ cần sửa đổi' php-fpm.conf'. –

1

Lỗi hiển thị sẽ chỉ ảnh hưởng đến thực tế là các lỗi được in ra đầu ra hay không.

Nếu bạn gặp lỗi nhật ký, các lỗi sẽ vẫn bị thiếu trong nhật ký trừ khi màn hình tắt, không phải là hành vi mong đợi.

Hành vi mong đợi là nếu nhật ký được bật, các lỗi được tìm thấy ở đó. Nếu màn hình bật, lỗi được tìm thấy trên màn hình/đầu ra. Nếu cả hai đều trên erros được tìm thấy trên cả hai.

Phiên bản hiện tại có lỗi làm mất điều đó.

+0

Bạn có biết một vé lỗi trong php.net theo dõi lỗi này không? Bạn có thể liên kết với nó không? – Sven

+0

Điều này: https://bugs.php.net/bug.php?id=61045 - Cố định trong PHP 5.3.14. – jorisw

1

Đối với Ubuntu 12.10, trong file php-fpm bơi-config:

php_flag[display_errors] = on 

Trong file php.ini:

display_errors = On 
Các vấn đề liên quan