2012-10-06 43 views
5

Trong khi phát triển một hệ thống web php, thiết lập E_ALL | E_STRICT để error_reporting và chăm sóc của tất cả các loại lỗi bao gồm cả lỗi thông báo là thực hành tốt.Loại lỗi nào nên dừng hệ thống, trong hệ thống web php được phát hành?

Nhưng trong hệ thống được phát hành, tôi có nên dừng hệ thống khi xảy ra lỗi thông báo không?

Hoặc tôi có nên dừng hệ thống chỉ khi E_ERROR xảy ra và bỏ qua tất cả các lỗi khác như E_WARNING, E_NOTICE hoặc E_STRICT?

Tôi nên xử lý loại lỗi nào trong trình xử lý lỗi tùy chỉnh của mình và dừng (thoát) hệ thống?

+2

Cảnh báo chắc chắn nên dừng hệ thống (nhưng không để lại các trình xử lý lỗi/ngoại lệ gốc, viết của riêng bạn mà không tiết lộ bất kỳ thông tin lỗi nào). Mức độ lỗi thấp hơn ít dứt khoát hơn, nhưng ít nhất bạn nên đăng nhập và gửi báo cáo cho chính mình - điều đó sẽ thúc đẩy bạn sửa chúng :) – DCoder

+0

@DCoder cảm ơn lời khuyên tốt! Bạn có thể cho tôi biết lý do tại sao bạn nên dừng hệ thống khi E_WARNING xảy ra? –

+1

Trong hầu hết các trường hợp, tính chính xác quan trọng hơn mức độ sẵn sàng cao, "không nhanh" là thích hợp hơn để "di chuyển bất kể cái gì". Một cảnh báo thường có nghĩa là một cái gì đó đã thực sự sai và di chuyển trên sẽ chỉ làm cho mọi việc tồi tệ hơn. Hãy xem xét câu hỏi phổ biến nhất trên trang web này - ["mysql_fetch_ mong đợi tham số ..., boolean given"] (http://stackoverflow.com/search?q=mysql+fetch+boolean+given). Nếu bạn không tạm dừng tập lệnh của mình trong cảnh báo đầu tiên, bạn sẽ nhận được một danh sách dài các cảnh báo lặp lại và thậm chí có thể làm hỏng dữ liệu khác bằng cách sử dụng kết quả của truy vấn không thành công trong quá trình xử lý tiếp theo. – DCoder

Trả lời

4

Khi bạn phát triển mã, bạn nên xử lý mọi cảnh báo bao gồm cả thông báo.

Để sản xuất, bạn không nên thực sự dừng lỗi. Thay vào đó, bạn có thể sử dụng set_error_handler() để quản lý bất kỳ lỗi nào như E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Chuyển hướng khách hàng đến trang tùy chỉnh, hiển thị thông báo tùy chỉnh cho bất kỳ loại lỗi nào. Vấn đề không phải là để lại thông tin lỗi mặc định.

Bạn nên luôn luôn có một hệ thống báo cáo bất kỳ lỗi nào gặp phải cho chính mình (thông qua e-mail hoặc như vậy) trên máy chủ sản xuất và chăm sóc chúng càng sớm càng tốt.

Trên php.net/set_error_handler bạn có nhiều ví dụ giúp cuộc sống của bạn dễ dàng hơn nhiều và giúp bạn theo dõi lỗi và cảnh báo.

+0

cảm ơn thông tin hữu ích! Trong tất cả các ví dụ về trình xử lý lỗi trong [php.net/set_error_handler] (http://php.net/set_error_handler) không gọi 'thoát' khi E_WARNING (không phải E_USER_WARNING) xảy ra. Bạn có nghĩ rằng bạn không cần hiển thị màn hình hoặc thông báo lỗi cho người dùng và dừng (thoát) hệ thống khi E_WARNING xảy ra? –

+0

Đó là quyết định của bạn, Cảnh báo không cần 'thoát', chúng chỉ là cảnh báo (chỉ mục không xác định, chức năng không được chấp nhận, v.v.) –

+0

cảm ơn câu trả lời của bạn! –