2009-06-24 24 views
12

Tôi muốn bạn đưa ra lý do tại sao một người nào đó không nên sử dụng cấp báo cáo lỗi có thể cao nhất trong PHP?Tại sao không sử dụng mức báo cáo lỗi cao nhất trong PHP?

cách để thiết lập mức cao nhất:

PHP < 5.4:

error_reporting(E_ALL | E_STRICT); 

PHP> = 5.4:

error_reporting(E_ALL); 

PHP tất cả các phiên bản (theo khuyến cáo cho config files) :

error_reporting(2147483647); 

PHP tất cả các phiên bản (config của tôi, -1 sẽ chứa tất cả các lỗi và dễ nhớ)

error_reporting(-1); 

kinh nghiệm của tôi:

  • không có lý do cho thấp cấp báo cáo
  • không bao giờ sử dụng error control operator
  • sử dụng để chuyển đổi tất cả các lỗi ngoại lệ qua set_error_handler và lớp ngoại lệ tùy chỉnh để ghi đè lên tập tin và dòng
+2

"Vì vậy, thay cho E_ALL, hãy xem xét sử dụng giá trị lớn hơn để bao quát tất cả các trường bit từ bây giờ đến tương lai, một giá trị số như 2147483647.": Nếu đó là giá trị được đề xuất để sử dụng cho error_reporting, tại sao chúng lại không đặt E_ALL thành 2147483647 ??? –

+0

nếu nó là sản xuất. đôi khi anh ta không muốn rằng costumer thấy cảnh báo của img không tồn tại hoặc một cái gì đó –

+4

@ haim: Bạn nên đăng nhập lỗi thay vì hiển thị chúng trong trình duyệt. –

Trả lời

22

Cá nhân tôi thích mã ở mức cao nhất của báo cáo lỗi, và sửa chữa tất cả các cảnh báo được tạo ra bởi mã của tôi. Tuy nhiên, tôi có thể dự tính một vài lý do khiến bạn có thể muốn làm việc ở cấp thấp hơn:

  1. Bạn có thể đang làm việc với mã cũ phát sinh nhiều cảnh báo. Nếu mã hoạt động chính xác thì đây không phải là vấn đề, nhưng "nhiễu" có thể làm mất tập trung và ngăn bạn nhìn thấy các vấn đề thực sự. Trong tình huống này có thể là mong muốn để giảm mức báo cáo lỗi.
  2. Trong môi trường sản xuất, bạn có thể chỉ muốn ghi nhật ký lỗi. Điều này có hai lợi ích, nó có nghĩa là bản ghi lỗi của bạn chỉ chứa các vấn đề quan trọng cần chú ý, và nó sẽ tiết kiệm không gian đĩa (và giảm đĩa i/o).

Tắt chủ đề sang một bên: Trong môi trường sản xuất, bạn nên chạy "display_errors = Off" và "error_logging = On" để ngăn người dùng nhìn thấy lỗi PHP (có thể chứa thông tin nhạy cảm ví dụ như thuộc tính kết nối cơ sở dữ liệu) và thu thập nhật ký các lỗi khi chúng xảy ra. Vì vậy, mức độ error_reporting sản xuất của bạn và cài đặt liên quan có thể khác với những gì bạn muốn chạy trong phát triển.

2

Tôi nghĩ rằng không có lý do chính đáng, ngoại trừ những gì Jim nói ở điểm đầu tiên của mình, chạy mã cũ không thể hoặc sẽ không bị thay đổi.

Bạn chắc chắn nên chạy nó ở cấp cao nhất trong quá trình phát triển và xóa sạch mọi cảnh báo và thông báo trừ khi bạn có lý do chính đáng.

Nếu bạn có lý do chính đáng để không sửa thông báo trong quá trình phát triển, bạn nên ghi lại thông báo và sử dụng toán tử contorl để tránh làm lộn xộn nhật ký.

1

Bên cạnh điểm của Jim, tôi sẽ luôn đề xuất mã hóa với mức báo cáo lỗi cao nhất vì nó sẽ cung cấp cho bạn khả năng di động tốt hơn và hiệu suất tốt hơn (đáng ngờ).

+0

tôi không thấy hiệu suất phù hợp với điều này như thế nào, ngoài việc điều khiển lỗi bị chậm. – stefs

+2

Sử dụng toán tử điều khiển lỗi có chi phí hiệu năng nhỏ. Tuy nhiên chi phí hoạt động chính là hành động kích hoạt cảnh báo (sau đó bị chặn). Tôi đã không suy nghĩ điều này trong câu trả lời ban đầu của tôi, nhưng Will thực sự là chính xác, mã phát ra rất nhiều cảnh báo (báo cáo hoặc bằng cách khác) có thể chạy chậm hơn mã sạch sẽ không phát ra cảnh báo. Xem http://vega.rd.no/articles/php-performance-error-suppression cho điểm chuẩn. –

0

Cũng từ quản trị viên sys PoV ... đôi khi không có gì bạn có thể làm về mã kế thừa hoặc mới. Một số nhà phát triển không sửa lỗi đúng cách và người quản lý sẽ xem bạn buồn cười nếu bạn lãng phí thời gian của ai đó với một thứ gì đó không thực sự quan trọng (không chắc chắn nếu điều này sẽ làm khó chịu bất kỳ ai, nhưng nếu kết quả giống nhau trước và sau, sau đó nó không thực sự quan trọng). Tôi cho một người rất hạnh phúc, tôi có thể vô hiệu hóa các thông báo và tập trung vào bất kỳ vấn đề thực sự nào.

Ngoài ra, đây chỉ là một cảnh quay trong bóng tối, nhưng có thể có một số cách để làm điều gì đó hơi lạ mắt với điều này về gỡ lỗi bằng cách sử dụng các cuộc gọi error_log().

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