Hướng dẫn dùng 500 php trong PHP
answer 58
58 hữu ích 3 bình luận chia sẻ answer 27 Đây chính xác là vấn đề tôi gặp phải ngày hôm qua và tôi đã tìm ra giải pháp như sau: 1) trước hết, bạn cần phải bắt các lỗi nghiêm trọng của PHP, đó là loại lỗi E_ERROR. khi lỗi này xảy ra, tập lệnh sẽ được lưu trữ lỗi và chấm dứt thực thi. bạn có thể gặp lỗi được lưu trữ bằng cách gọi hàm error_get_last (). 2) trước khi tập lệnh kết thúc, một hàm gọi lại register_shutdown_ Chức năng () sẽ luôn được gọi. vì vậy bạn cần đăng ký một trình xử lý lỗi bằng chức năng này để thực hiện những gì bạn muốn, trong trường hợp này, trả về tiêu đề 500 và trang lỗi nội bộ tùy chỉnh (tùy chọn).
Lưu ý: nếu bạn muốn bắt loại lỗi tùy chỉnh, bắt đầu bằng E_USER *, bạn có thể sử dụng hàm set_error_handler () để đăng ký trình xử lý lỗi và lỗi kích hoạt bởi hàm trigger_error, tuy nhiên, trình xử lý lỗi này không thể xử lý loại lỗi E_ERROR. xem giải thích trên php.net về trình xử lý lỗi 27 hữu ích 2 bình luận chia sẻ answer 7 Tôi đã sử dụng "set_exception_handler" để xử lý các trường hợp ngoại lệ không cần thiết.
7 hữu ích 2 bình luận chia sẻ answer 7 Cấu hình tiêu chuẩn PHP không trở lại 500 khi lỗi xảy ra! Chỉ cần đảm bảo rằng display_errors = tắt. Bạn có thể mô phỏng nó bằng:
Trên sản xuất, chỉ thị display_errors bị tắt theo mặc định. 7 hữu ích 1 bình luận chia sẻ answer 3 Không thể xử lý PHP E_ERROR theo bất kỳ cách nào theo tài liệu PHP: http://www.php.net/manual/en/ Chức năng.set-error-handler.php Cũng không thể xử lý "E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING và hầu hết E_STRICT" theo liên kết đó. Bạn CÓ THỂ cung cấp một trình xử lý cho lỗi, cảnh báo và thông báo khác bao gồm cả E_USER_ERROR, nhưng điều đó thực sự không hữu ích như nó có vẻ vì lỗi này chỉ được lập trình viên cố tình ném ra với trigger_error (). Và tất nhiên bạn có thể bắt gặp bất kỳ Ngoại lệ nào (ngay cả những Ngoại lệ do các hàm PHP gốc ném ra). Tôi đồng ý rằng đây là một vấn đề. Máy chủ KHÔNG được trả về 200 OK khi mã ứng dụng bị treo và cháy. 3 hữu ích 1 bình luận chia sẻ answer 2 Vì PHP> = 5,4
Vui lòng đặt Mã httpC trước đó 2 hữu ích 0 bình luận chia sẻ answer 0 0 hữu ích 1 bình luận chia sẻ answer 0 Bạn sẽ phải bắt lỗi được ném ra bằng cách sử dụng try / catch và sau đó sử dụng khối catch đó để gửi tiêu đề () với lỗi 500.
Nếu ngoại lệ nghiêm trọng không được bao quanh bởi các khối try {} catch thì bạn phải đăng ký một trình xử lý chung và sử dụng 0 hữu ích 5 bình luận chia sẻ answer 0 Đừng bao giờ quên đặt
Trong 0 hữu ích 2 bình luận chia sẻ answer 0 Điều khó khăn khi xử lý các lỗi nghiêm trọng (lỗi biên dịch, ví dụ như thiếu dấu chấm phẩy) là tập lệnh sẽ không được thực thi, vì vậy việc đặt mã trạng thái trong tập lệnh đó sẽ không hữu ích. Tuy nhiên, khi bạn bao gồm hoặc yêu cầu một tập lệnh, tập lệnh gọi sẽ được thực thi, bất kể lỗi trong tập lệnh được bao gồm. Với điều này, tôi đi đến giải pháp này: rock-solid-script.php:
script-i-want-to-Guard-for-error.php:
Hướng cuộc gọi của bạn đến rock-solid-script.php và bạn đã sẵn sàng. Tôi sẽ thích nó hơn nếu đặt mã trạng thái mặc định thành 500 trong .htaccess. Điều đó có vẻ thanh lịch hơn đối với tôi nhưng tôi không thể tìm ra cách để kéo nó ra. Tôi đã thử cờ Rule RewriteRule, nhưng điều này ngăn chặn hoàn toàn việc thực thi php, vì vậy điều đó không được sử dụng. 0 hữu ích 0 bình luận chia sẻ |