Xử lý lỗi trong PHP rất đơn giản. Một thông báo lỗi với tên tệp, số dòng và thông báo mô tả lỗi được gửi đến trình duyệt.
Xử lý lỗi PHP
Khi tạo tập lệnh và ứng dụng web, xử lý lỗi là một phần quan trọng. Nếu mã của bạn thiếu mã kiểm tra lỗi, chương trình của bạn có thể trông rất không chuyên nghiệp và bạn có thể sẵn sàng cho các rủi ro bảo mật.
Hướng dẫn này chứa một số phương pháp kiểm tra lỗi phổ biến nhất trong PHP.
Chúng tôi sẽ hiển thị các phương pháp xử lý lỗi khác nhau:
- Các câu lệnh "Die []" đơn giản
- Lỗi tùy chỉnh và kích hoạt lỗi
- Báo cáo lỗi
Xử lý lỗi cơ bản: Sử dụng hàm Die []
Ví dụ đầu tiên hiển thị một tập lệnh đơn giản mở tệp văn bản:
Nếu tệp không tồn tại, bạn có thể gặp lỗi như thế này:
CẢNH BÁO: fopen [mytestfile.txt] [function.fopen]: Không thể mở luồng: Không có tệp hoặc thư mục đó trong C: \ WebFolder \ test.php trên dòng 2: fopen[mytestfile.txt] [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line
2
Để ngăn người dùng nhận được thông báo lỗi như ở trên, chúng tôi kiểm tra xem tệp có tồn tại trước khi chúng tôi cố gắng truy cập nó không:
Thí dụ
Hãy tự mình thử »
Bây giờ nếu tệp không tồn tại, bạn sẽ gặp lỗi như thế này:
Lỗi: Tệp không tồn tại.
Mã trên hiệu quả hơn mã trước đó, vì nó sử dụng cơ chế xử lý lỗi đơn giản để dừng tập lệnh sau lỗi.
Tuy nhiên, chỉ cần dừng kịch bản không phải lúc nào cũng là cách đúng đắn. Chúng ta hãy xem các chức năng PHP thay thế để xử lý lỗi.
Tạo trình xử lý lỗi tùy chỉnh
Tạo một xử lý lỗi tùy chỉnh khá đơn giản. Chúng tôi chỉ cần tạo một chức năng đặc biệt có thể được gọi khi xảy ra lỗi trong PHP.
Hàm này phải có khả năng xử lý tối thiểu hai tham số [mức độ lỗi và thông báo lỗi] nhưng có thể chấp nhận tối đa năm tham số [tùy chọn: tệp, số dòng và bối cảnh lỗi]:
Cú pháp
ERROR_FUNCTION [ERROR_LEVEL, ERROR_MESSAGE, ERROR_FILE, ERROR_LINE, ERROR_CONTEXT]
error_file,error_line,error_context]
ERROR_LEVEL | Yêu cầu. Chỉ định mức báo cáo lỗi cho lỗi do người dùng xác định. Phải là một số giá trị. Xem bảng bên dưới để biết các cấp báo cáo lỗi có thể xảy ra |
thông báo lỗi | Yêu cầu. Chỉ định thông báo lỗi cho lỗi do người dùng xác định |
ERROR_FILE | Không bắt buộc. Chỉ định tên tệp trong đó xảy ra lỗi |
ERROR_LINE | Không bắt buộc. Chỉ định số dòng trong đó xảy ra lỗi |
ERROR_CONTEXT | Không bắt buộc. Chỉ định một mảng chứa mọi biến và giá trị của chúng, được sử dụng khi xảy ra lỗi |
Mức độ báo cáo lỗi
Các cấp báo cáo lỗi này là các loại lỗi khác nhau mà trình xử lý lỗi do người dùng xác định có thể được sử dụng cho:
1 | ERROR_LEVEL | Yêu cầu. Chỉ định mức báo cáo lỗi cho lỗi do người dùng xác định. Phải là một số giá trị. Xem bảng bên dưới để biết các cấp báo cáo lỗi có thể xảy ra |
2 | thông báo lỗi | Yêu cầu. Chỉ định thông báo lỗi cho lỗi do người dùng xác định |
8 | ERROR_FILE | Không bắt buộc. Chỉ định tên tệp trong đó xảy ra lỗi |
256 | ERROR_LINE | Không bắt buộc. Chỉ định số dòng trong đó xảy ra lỗi |
512 | ERROR_CONTEXT | Không bắt buộc. Chỉ định một mảng chứa mọi biến và giá trị của chúng, được sử dụng khi xảy ra lỗi |
1024 | Mức độ báo cáo lỗi | Các cấp báo cáo lỗi này là các loại lỗi khác nhau mà trình xử lý lỗi do người dùng xác định có thể được sử dụng cho: |
2048 | Giá trị | Không thay đổi |
8191 | E_error | Một lỗi thời gian chạy nghiêm trọng. Việc thực thi tập lệnh bị dừng |
E_warning
Một lỗi thời gian chạy không gây tử vong. Việc thực thi tập lệnh không bị dừng
echo "Error: [$errno] $errstr
";
echo "Ending Script";
die[];
}
E_notice
Một thông báo thời gian chạy. Tập lệnh đã tìm thấy một cái gì đó có thể là một lỗi, nhưng cũng có thể xảy ra khi chạy tập lệnh bình thường
E_user_error
Một lỗi do người dùng tạo ra. Điều này giống như một e_error, ngoại trừ nó được tạo bởi tập lệnh PHP bằng cách sử dụng chức năng Trigger_error []
E_user_warning
Một cảnh báo không phải là người dùng do người sử dụng tạo ra. Điều này giống như một e_warning, ngoại trừ nó được tạo bởi tập lệnh PHP bằng cách sử dụng chức năng Trigger_error []
E_user_notice
Thí dụ
Testing the error handler by trying to output variable that does not exist:
Hãy tự mình thử »
//error handler function
function customError[$errno, $errstr] {
echo "Error: [$errno] $errstr";
}
Bây giờ nếu tệp không tồn tại, bạn sẽ gặp lỗi như thế này:
set_error_handler["customError"];
// Echo lỗi kích hoạt [$ test]; ?>
echo[$test];
?>
Đầu ra của mã trên phải là một cái gì đó như thế này:
Lỗi: [8] Biến không xác định: Kiểm tra [8] Undefined variable: test
Kích hoạt một lỗi
Trong một tập lệnh nơi người dùng có thể nhập dữ liệu, rất hữu ích khi kích hoạt lỗi khi xảy ra đầu vào bất hợp pháp. Trong PHP, điều này được thực hiện bởi hàm trigger_error[]
.
Thí dụ
Trong ví dụ này, một lỗi xảy ra nếu biến "kiểm tra" lớn hơn "1":
= 1] {& nbsp; Trigger_error ["Giá trị phải là 1 hoặc thấp hơn"]; }?>
$test=2;
if [$test>=1] {
trigger_error["Value must be 1 or below"];
}
?>
Đầu ra của mã trên phải là một cái gì đó như thế này:
Lỗi: [8] Biến không xác định: Kiểm tra: Value must be 1 or below
in C:\webfolder\test.php on line 6
Kích hoạt một lỗi
Trong một tập lệnh nơi người dùng có thể nhập dữ liệu, rất hữu ích khi kích hoạt lỗi khi xảy ra đầu vào bất hợp pháp. Trong PHP, điều này được thực hiện bởi hàm trigger_error[]
.
- Thí dụ
- Trong ví dụ này, một lỗi xảy ra nếu biến "kiểm tra" lớn hơn "1":
- = 1] {& nbsp; Trigger_error ["Giá trị phải là 1 hoặc thấp hơn"]; }?>
Thí dụ
Trong ví dụ này, một lỗi xảy ra nếu biến "kiểm tra" lớn hơn "1":
= 1] {& nbsp; Trigger_error ["Giá trị phải là 1 hoặc thấp hơn"]; }?>
//error handler function
function customError[$errno, $errstr] {
echo "Error: [$errno] $errstr
";
echo "Ending Script";
die[];
}
Thông báo: Giá trị phải là 1 hoặc bên dưới trong C: \ WebFolder \ test.php trên dòng 6
set_error_handler["customError",E_USER_WARNING];
Một lỗi có thể được kích hoạt bất cứ nơi nào bạn muốn trong một tập lệnh và bằng cách thêm tham số thứ hai, bạn có thể chỉ định mức độ lỗi nào được kích hoạt.
$test=2;
if
[$test>=1] {
trigger_error["Value must be 1 or below",E_USER_WARNING];
}
?>
Đầu ra của mã trên phải là một cái gì đó như thế này:
Các loại lỗi có thể có: [512] Value must be 1 or below
Ending Script
E_USER_ERROR-Lỗi thời gian chạy do người dùng gây tử vong. Lỗi không thể phục hồi từ. Việc thực thi tập lệnh bị tạm dừng
E_USER_WARNING-Cảnh báo thời gian chạy do người dùng không phù hợp. Việc thực thi tập lệnh không bị dừng lại
E_user_notice - mặc định. Thông báo thời gian chạy do người dùng tạo. Tập lệnh đã tìm thấy một cái gì đó có thể là một lỗi, nhưng cũng có thể xảy ra khi chạy tập lệnh bình thường
Trong ví dụ này, một biến số e_user_warning xảy ra nếu biến "kiểm tra" lớn hơn "1". Nếu xảy ra E_USER_WARNING, chúng tôi sẽ sử dụng trình xử lý lỗi tùy chỉnh của chúng tôi và kết thúc tập lệnh:
Send an Error Message by E-Mail
// Đặt lỗi Handler set_error_handler ["CustomError", e_user_warning];
= 1] {& nbsp; Trigger_error ["Giá trị phải là 1 hoặc thấp hơn"]; }?>
//error handler function
function customError[$errno,
$errstr] {
echo "Error: [$errno] $errstr
";
echo "Webmaster has been notified";
error_log["Error: [$errno] $errstr",1,
"","From: "];
}
Thông báo: Giá trị phải là 1 hoặc bên dưới trong C: \ WebFolder \ test.php trên dòng 6
set_error_handler["customError",E_USER_WARNING];
Một lỗi có thể được kích hoạt bất cứ nơi nào bạn muốn trong một tập lệnh và bằng cách thêm tham số thứ hai, bạn có thể chỉ định mức độ lỗi nào được kích hoạt.
$test=2;
if [$test>=1] {
trigger_error["Value must be 1 or below",E_USER_WARNING];
}
?>
Đầu ra của mã trên phải là một cái gì đó như thế này:
Các loại lỗi có thể có: [512] Value must be 1 or below
Webmaster has been notified
E_USER_ERROR-Lỗi thời gian chạy do người dùng gây tử vong. Lỗi không thể phục hồi từ. Việc thực thi tập lệnh bị tạm dừng
E_USER_WARNING-Cảnh báo thời gian chạy do người dùng không phù hợp. Việc thực thi tập lệnh không bị dừng lại
E_user_notice - mặc định. Thông báo thời gian chạy do người dùng tạo. Tập lệnh đã tìm thấy một cái gì đó có thể là một lỗi, nhưng cũng có thể xảy ra khi chạy tập lệnh bình thường