Apache có một thư mục Lỗi tài liệu, bạn có thể định cấu hình trong file httpd.conf để tạo ra những trang thông báo lỗi với PHP, vì thế người thăm trang web không thấy buồn chán.. Thi hàn
Trang 1Chương 9 : ĐIỀU KHIỂN VÀ TRÁNH
NHỮNG LỖI
Sau khi viết mã lệnh, người mới lập trình sẽ gặp không ít khó khăn trong việc tìm
ra lỗi và chỉnh sửa lỗi PHP hỗ trợ đầy đủ tính năng lập trình giao diện API (Applications Programming Interface) có thể tìm ra lỗi và khắc phục những lỗi ấy Ngoài PHP thì Apache Web Server cũng hỗ trợ người lập trình tìm ra lỗi và khắc phục lỗi
Tiếp xúc với lỗi Apache Web Server như thế nào?
Apache có một thư mục Lỗi tài liệu, bạn có thể định cấu hình trong file httpd.conf
để tạo ra những trang thông báo lỗi với PHP, vì thế người thăm trang web không thấy buồn chán PHP tạo ra trang web thông báo lỗi thân thiện cho người dùng
Không giống những trang thông báo lỗi như PHP, trang của Apache được sử dụng nhiều cho những trang đã mất
Thi hành lỗi và tạo ra việc sửa trang lỗi với PHP
Phụ thuộc vào kiểu lỗi xuất hiện mà đưa ra những thông báo lỗi thích hợp, phải đưa ra những lỗi để người nhận thông báo lỗi cảm thấy dễ chịu, không cảm thấy xấu hổ
và có hướng giải quyết lỗi tốt
Các loại lỗi trong PHP
Có 12 kiểu lỗi trong PHP, được liệt kê dưới đây
Trang 2E_NOTICE 8 Chú ý
khởi động
khởi động
E_COMPILE_WARNING 128 Lỗi thời gian biên dịch
không nặng lắm(cảnh báo)
trigger_error()
dùng hàm trigger_error()
trigger_error()
báo
hiện cần có thay đổi tương thích
Bạn không phải lo lắng về lỗi đánh máy, hãy quan tâm đến những cảnh báo, những lỗi mà bạn gặp phải, để có sự giải quyết kịp thời, dễ sử dụng hơn cho người dùng
Trang 3Ở đây có 3 loại lỗi chính
Fatal error: Lỗi nặng khi thực hiện, thông báo lỗi không thể sửa đổi, thực hiện theo ngyuên bản
Warning: Cảnh báo, không được dùng tập lệnh vừa rồi
Notices: Chú ý, khi chạy vẫn đúng nhưng có một lỗi nhỏ
Việc phát sinh lỗi PHP
Chúng ta tạo vài lỗi để có thể kiểm tra cần giải quyết thế nào?Như ví dụ sau:
<?php //set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING
//because of wrong parameter count str_replace(“Worx”, “Wrox”);
?>
Nếu bạn chạy đoạn mã này, bạn sẽ thấy lỗi như sau:
Warning: Wrong parameter count for str_replace() in C:\FoxServ\www\errorhandling\error1.php on line 8 Lỗi này xuất hiện vì hàm str_replace yêu cầu tham số thứ 3 cho hàm Tham số này là biến, $string_variable hoặc chuỗi văn bản mà bạn muốn nghiên cứu cho tham số thứ nhất,
“Worx” và thay thế nó với “Worx” Bởi điều này không tạo ra lỗi lớn mà không thi hành tập lệnh, bạn có thể vẫn chạy đoạn code sau khi lỗi xuất hiện, nếu bạn làm như sau:
<?php //set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING
//because of wrong parameter count str_replace(“Worx”, “Wrox”);
Trang 4//this is a non-fatal error, so the original //variable should still show up after the warning echo $string_variable;
?>
Chuỗi vẫn tiếp tục được thi hành sau lỗi, nó sẽ sinh ra như sau:
Warning: Wrong parameter count for str_replace() in c:\FoxServ\www\errorhandling\error1.php on line 8 Worx books are great!
Kế đến, chúng ta sẽ đưa ra những lỗi nặng để cho bạn thấy nó sinh ra những kết quả khác nhau khi lỗi xuất hiện như thế nào
<?php //beginning of page echo “Beginning”;
//we are going to make a call to //a function that doesn’t exist //this will generate an E_ERROR //and will halt script execution //after the call of the function fatalerror();
//end of page echo “End”;
//won’t be output due to the fatal error
?>
Sẽ xuất hiện như sau:
Beginning Fatal error: Call to undefined function: fatalerror() in c:\FoxServ\www\errorhandling\error2.php on line 10
Trang 5Chú ý là “Beginning” được đưa ra vì hàm trước nó được gọi, nhưng “End” thì không đưa ra vì lỗi thực hiện quá lớn Bạn có thể ngăn lỗi lại bằng việc dùng một ký hiệu như sau: @fatalerror (ngăn chặn lỗi nhưng vẫn gặp lỗi khi thi hành)
Khi PHP mặc định lỗi không thấy E_NOTICE xuất hiện, tuy nhiên bạn có thể cho phép người dùng gỡ những lỗi như khi dùng $row[variable] vì PHP coi [variable] như một hằng, nếu không là hằng nó giả thiết là chuỗi trong mảng Có thể đưa ra thông báo
lỗi khi dùng error_reporting(number) mà số không thay đổi
Nếu bạn không biết cấp độ lỗi được thiết lập, bạn có thể chạy hàm error_reporting() đơn giản với bất kỳ chủ đề nào:
<?php echo error_reporting();
?>
Mặc định, tất cả những việc thi hành lỗi được điều khiển bời người xây dựng nên lỗi, cho bạn những thông báo về liểu lỗi, tên file, số dòng lỗi xuất hiện
Bạn chú ý một lỗi như sau:
Warning: Wrong parameter count for str_replace() in c:\FoxServ\www\errorhandling\error1.php on line 8
Thông thường việc phát sinh lỗi thì tốt vì có thể thông báo cho người quản trị biết
là anh ta có thể biết nhiều hơn từ những lỗi ấy
Ví dụ về việc một người tạo lỗi thông thường
Bạn sẽ tạo một lỗi thông thường nhưng thân thiện với người dùng và hiển thị như sau:
1 Trình soạn thảo trong ví dụ trước như sau:
<?php
//create your error handler function function handler($error_type,
$error_message,
$error_file,
$error_line)
Trang 6{
echo “<h1>Page Error</h1>”;
echo “Errors have occurred while executing this page Contact the “;
href=\”mailto:admin@yourdomain.com\”>administrator</a>
“
“to report errors<br><br>”;
echo “<b>Information Generated</b><br><br>”;
echo “<b>Error Type:</b> $error_type<br>”;
echo “<b>Error Message:</b> $error_message<br>”;
echo “<b>Error Filename:</b> $error_file<br>”;
echo “<b>Error Line:</b> $error_line”;
} //set the error handler to be used set_error_handler(“handler”);
//set string with “Wrox” spelled wrong
$string_variable = “Worx books are great!”;
//try to use str_replace to replace Worx with Wrox //this will generate an E_WARNING
//because of wrong parameter count str_replace(“Worx”, “Wrox”);
?>
2 Lưu file với tên custom_error.php và mở trình duyệt, bạn sẽ thấy như