php error handling
php error handling

1. PHP Error Handling – Khái niệm

PHP error handling là gì?

PHP error handling là thuật ngữ thông dụng để nói về việc quản lý, xử lý các lỗi trong PHP.

Đối với lập trình viên thì việc xảy ra lỗi trong quá trình phát triển ứng dụng là một điều không thể tránh khỏi, phải nói là thường xuyên :)) . Và trong PHP thì khi xuất hiện lỗi sẽ lập tức một thông báo lỗi với tên file, số dòng và thông báo mô tả lỗi được gửi đến trình duyệt của người dùng.

Nếu là một website chuyên nghiệp thì điều này rất không tốt, ảnh hưởng đến uy tín cũng như chất lượng của website. Để tránh tình trạng này thì ngày hôm nay mình sẽ hướng dẫn các bạn các thủ thuật xử lý lỗi thường dùng trong PHP (PHP error handling) nhé!

2. Xử lý lỗi với hàm die()

Ví dụ dưới đây là một đoạn code lỗi do không tìm thấy file “welcome.txt”

Khi câu lệnh trên được chạy thì một thông báo lỗi sẽ hiển thị trên trình duyệt có dạng như sau

Warning: fopen(welcome.txt) [function.fopen]: failed to open stream:

No such file or directory in C:\webfolder\test.php on line 2

Để tránh người dùng thấy được lỗi như trên thì chúng ta sẽ kiểm tra sự tồn tại của file “welcome.txt” trước khi truy cập vào nó

Bây giờ nếu file “welcome.txt” không tồn tại thì sẽ nhận được lỗi như sau

Không tìm thấy file

Đây là cách đơn giản nhất để hạn chế hiển thị thông báo lỗi mặc định của PHP.

Tuy nhiên cách này cũng chưa phải là một cách chuyên nghiệp, chúng ta sẽ xem cách xử lý lỗi chuyên nghiệp hơn bằng cách tạo thông báo lỗi thay thế PHP nhé!

3. Tạo một trình xử lý lỗi tùy chỉnh

Để tạo một thông báo lỗi theo cách chúng ta muốn thì các bạn tạo một hàm riêng. Ở đây mình lấy ví dụ bằng một hàm có tên là “customError”

Cú pháp

customError($errno, $errstr)

Trong đó cả hai tham số $errno$errstr là bắt buộc phải có nhé!

Đây là hàm chúng ta sẽ dùng để tùy chỉnh cách hiển thị lỗi, mình ví dụ như sau

Tiếp theo làm cách nào khi xảy ra lỗi sẽ gọi đến hàm “customError” mà chúng ta vừa tạo?. Để làm việc đó chúng ta sẽ thiết lập mặc định cho nó bằng hàm set_error_handler()

Cú pháp

set_error_handler(“customError”);

Và đây là ví dụ cụ thể

Khi chạy đoạn trên ta lỗi sẽ xuất hiện với nội dung như thế này

Error: [8] Undefined variable: test

Các bạn lưu ý “[8]” ở đây là cấp bậc của lỗi mà trong PHP quy định, các bạn có thể xem bảng dưới đây để hiểu rõ hơn:

Giá trị Loại lỗi Diễn giải
2 E_WARNING Non-fatal run-time errors.  Vẫn thực hiện mã lệnh không bị dừng
8 E_NOTICE Run-time notices. Đoạn mã tìm thấy một cái gì đó có thể là lỗi, nhưng cũng có thể xảy ra khi chạy một đoạn mã bình thường, chỉ là thông báo lỗi nhắc nhở.
256 E_USER_ERROR Fatal user-generated error. Điều này giống như một lỗi được thiết lập bởi các lập trình viên bằng cách sử dụng hàm trigger_error()
512 E_USER_WARNING Non-fatal user-generated warning. Điều này giống như một cảnh báo được thiết lập bởi các lập trình viên bằng cách sử dụng hàm trigger_error()
1024 E_USER_NOTICE User-generated notice. Điều này giống như một nhắc nhở được thiết lập bởi các lập trình viên bằng cách sử dụng hàm trigger_error()
4096 E_RECOVERABLE_ERROR Catchable fatal error. Điều này giống như một lỗi nhưng có thể bị phát hiện bởi một người dùng xác định (xem set_error_handler())
8191 E_ALL Tất cả các lỗi và cảnh báo (E_STRICT đã trở thành một phần của E_ALL trong PHP 5.4)

Dựa vào cấp bậc của lỗi mà PHP hiển thị chúng ta có thể hiểu đó là lỗi gì và do đâu xuất hiện, hỗ trợ chúng ta trong việc kiểm tra code. Các bạn có thể tham khảo thêm ở đây.

Trên đây là cách chúng ta xử lý lỗi mặc định của PHP, Còn nếu chúng ta muốn tự mình tạo ra lỗi thì như thế nào?. Ví dụ như code ok nhưng chúng ta muốn nó phải sinh ra một lỗi :)) . Đơn giản thôi dùng hàm trigger_error() , chúng ta xem phần tiếp theo nhé!

4. Tự tạo một lỗi với hàm trigger_error()

Ví dụ dưới đây sẽ sinh ra một lỗi nếu $test lớn hơn 1

Đoạn trên sẽ xuất ra một lỗi như sau

Notice: Giá trị phải nhỏ hơn 1

in C:\webfolder\test.php on line 6

Bây giờ bạn muốn thêm lỗi này vào hàm “customError” mà chúng ta đã thực hiện ở phần 3 không?, Chỉ việc thêm 1 cấp bậc lỗi vào hàm trigger_error() là được, cấp bậc có thể dùng bao gồm:

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE – Mặc định nếu không có tham số cấp bậc sẽ dùng lỗi này!

Ví dụ

Kết quả sau khi chạy đoạn code trên là

Error: [512] Giá trị phải nhỏ hơn 1

Ngưng hoạt động

5. Ghi lại lỗi – error logging

Theo mặc định, PHP sẽ tự động gửi bản ghi lỗi vào hệ thống logging hoặc vào một file, tùy thuộc vào cách cấu hình error_log được đặt trong tệp php.ini. Bằng cách sử dụng hàm error_log(), bạn có thể gửi bản ghi lỗi tới một file xác định hoặc một điểm đến từ xa.

Gửi các thông báo lỗi cho chính bạn bằng e-mail có thể là một cách tốt để nhận được thông báo về các lỗi cụ thể. Cách thực hiện như thế nào các bạn xem phần tiếp theo nhé!

6. Gửi email thông báo lỗi

Dưới đây là ví dụ sử dụng hàm error_log() để gữi email thông báo lỗi cho bạn hoặc người khác

Chạy đoạn trên cho kết quả

Error: [512] Giá trị phải nhỏ hơn 1

Chúng tôi đã nhận được thông báo lỗi

Và nội dung được gữi trong email sẽ như thế này

Error: [512] Giá trị phải nhỏ hơn 1

Tuy nhiên việc gửi email các bạn chỉ nên áp dụng cho các trường hợp cần thiết. Vì lỗi thông thường mặc định đã được lưu trong hệ thống ghi lỗi của PHP rồi!

7. Lời kết

Như vậy chúng ta đã biết được cách xử lý lỗi trong php (PHP error handling) như thế nào rồi đúng không. Các bạn có thể sử dụng code demo (PHP error handling) ở trên để sử dụng trong ứng dụng website của các bạn nhé!. Nếu có phần nào không hiểu hoặc thắc mắc các bạn hãy comment bên dưới nha. Bây giờ thì chuyển qua bài học tiếp theo nào 🙂 Lộ trình học PHP – Tổng hợp PHP – Căn bản – Nâng cao

 

Nguồn: phpcanban.com

 

PHP Error Handling – Xử lý lỗi trong PHP – Chương 9
5 (100%) 1 vote

Chia sẻ
Bài trướcHàm filter trong PHP – Chương 8
Bài tiếp theoPHP Exception – Ngoại Lệ Trong PHP – Chương 10
Mình là Nguyễn Công! Mình bắt đầu kiếm tiền Online từ năm 2017 và nhờ đó mà có thu nhập rất ổn định. Mình chia sẽ những dự án kiếm tiền Online tốt nhất đã được khảo sát và chắt lọc cho các bạn. Hy vọng thông qua những bài viết phân tích đánh giá ICO các bạn sẽ đưa ra quyết định đầu tư thành công!. Chúc các bạn một ngày nhiều niềm vui! Group Facebook: https://goo.gl/CXVpWU Group Telegram: https://goo.gl/7w3c4t

BÌNH LUẬN

Please enter your comment!
Please enter your name here