Gốc > Các thông tin khác > Lập trình cơ sở >
Kinh nghiệm sửa lỗi PHP
Để sửa lỗi thì phải biết lỗi như thế nào. Vì thế việc đầu tiên bạn cần làm là bật tính năng thông báo lỗi của PHP lên.
1. Sửa php.ini file. Set display_errors thành On. Restart webserver.
- Nếu như bạn đang dùng share host , ko thể tự edit php.ini được thì bạn có thể dùng hàm ini_set để bật tính năng này lúc run-time ( chỉ có tác dụng với script đang chạy)
2. Ở đầu script , thêm vào :
Nếu ko set như thế thì mặc định nó sẽ có giá trị là E_ALL & ~E_NOTICE & ~E_STRICT , và như thế nó sẽ báo trình thông dịch PHP hiện tất cả lỗi ngoại trừ Notices và Strict Notices.
Danh sách các giá trị bạn có thể truyền cho error_reporting là :
Value - Constant
1 -E_ERROR
2 -E_WARNING
4 -E_PARSE
8 -E_NOTICE
16 -E_CORE_ERROR
32 -E_CORE_WARNING
64 -E_COMPILE_ERROR
128 -E_COMPILE_WARNING
256 -E_USER_ERROR
512 -E_USER_WARNING
1024 -E_USER_NOTICE
6143 -E_ALL
2048 -E_STRICT
4096 -E_RECOVERABLE_ERROR
Bạn có thể dùng giá trị trực tiếp hoặc constant đều được( nên dùng constant cho dễ hiểu)
Bạn có thể xem thêm về hàm này tại đây : http://vn.php.net/error_reporting
Lưu ý :
- Khi website đã hoạt động ổn định thì nên tắt tính năng này đi bằng cách set error_reporting thành 0 :
Đó chính là bước chuẩn bị cần thiết để "bắt lỗi" với PHP.
Khởi đầu với những lỗi cơ bản - Parse Errors
Parse Error là những lỗi về cú pháp (syntax error) . Lỗi này sẽ xuất hiện khi bạn viết code không theo đúng khuôn dạng php qui định như : thiếu dấu ( , dấu nháy " , sai chính tả từ khóa, sai tên hàm ... Đây là lỗi thuộc dạng thường gặp và dễ sửa . Khi gặp lỗi này PHP sẽ xuất ra những thông báo cho bạn biết xuất hiện lỗi ở dòng nào và lý do lỗi ( khá chung chung)
Bạn xem đoạn code sau :
Nhìn vào sẽ thấy ngay đoạn code này thiếu dấu nháy cuối chuỗi ở print "Hello World;
Và khi chạy PHP sẽ tặng bạn 1 thông báo thế này :
Và nếu chưa quen bạn sẽ rất ngạc nhiên vì ko biết dòng số 5 có lỗi gì
Điều này bởi vì PHP sẽ xem dấu nháy trước chữ Hello là đánh dấu bắt đầu 1 chuỗi, nó sẽ dò theo cho đến kí tự nháy tiếp theo để kết thúc 1 chuỗi. Trong trường hợp này nó dò đến tận cùng code vẫn ko gặp, đành phải ... hét lên có lỗi ở đấy .
Và khi PHP báo lỗi ở dòng :
Bạn nên tìm ngược lên , dò từng dòng xem có chuỗi nào ko được bao trong cặp nháy hay không .
Đây là những cặp dấu bao thông dụng , rất thường bị lỗi unexpected $end .
Bạn xem đoạn code sau:
Nhìn vào ta sẽ thấy lệnh if có lỗi thiếu ( . Và đúng như thế PHP sẽ báo lỗi thế này
Lần này PHP báo chính xác dòng có lỗi .
Một lỗi cũng hay gặp là thiếu dấu ; ở cuối câu lệnh . Với lỗi này thì PHP sẽ báo lỗi ở dòng phía sau dòng có lỗi . Vì thế nên kiểm tra trước sau trên dưới cẩn thận.
Sử dụng var_dump()
Hàm này rất hữu dụng khi ta cần sửa các logic error . Khi cần biết 1 biến đang chứa những gì bên trong và kiểu dữ liệu của nó ta cứ var_dump in nó ra xem xét
VD :
Sẽ cho ra :
Nguyễn Đình Thắng @ 09:33 23/02/2010
Số lượt xem: 765
1. Sửa php.ini file. Set display_errors thành On. Restart webserver.
- Nếu như bạn đang dùng share host , ko thể tự edit php.ini được thì bạn có thể dùng hàm ini_set để bật tính năng này lúc run-time ( chỉ có tác dụng với script đang chạy)
Code:
ini_set("error_reporting", E_ALL);
2. Ở đầu script , thêm vào :
Code:
error_reporting(E_ALL);
Nếu ko set như thế thì mặc định nó sẽ có giá trị là E_ALL & ~E_NOTICE & ~E_STRICT , và như thế nó sẽ báo trình thông dịch PHP hiện tất cả lỗi ngoại trừ Notices và Strict Notices.
Danh sách các giá trị bạn có thể truyền cho error_reporting là :
Value - Constant
1 -E_ERROR
2 -E_WARNING
4 -E_PARSE
8 -E_NOTICE
16 -E_CORE_ERROR
32 -E_CORE_WARNING
64 -E_COMPILE_ERROR
128 -E_COMPILE_WARNING
256 -E_USER_ERROR
512 -E_USER_WARNING
1024 -E_USER_NOTICE
6143 -E_ALL
2048 -E_STRICT
4096 -E_RECOVERABLE_ERROR
Bạn có thể dùng giá trị trực tiếp hoặc constant đều được( nên dùng constant cho dễ hiểu)
Bạn có thể xem thêm về hàm này tại đây : http://vn.php.net/error_reporting
Lưu ý :
- Khi website đã hoạt động ổn định thì nên tắt tính năng này đi bằng cách set error_reporting thành 0 :
Code:
error_reporting(0);
Đó chính là bước chuẩn bị cần thiết để "bắt lỗi" với PHP.
Khởi đầu với những lỗi cơ bản - Parse Errors
Parse Error là những lỗi về cú pháp (syntax error) . Lỗi này sẽ xuất hiện khi bạn viết code không theo đúng khuôn dạng php qui định như : thiếu dấu ( , dấu nháy " , sai chính tả từ khóa, sai tên hàm ... Đây là lỗi thuộc dạng thường gặp và dễ sửa . Khi gặp lỗi này PHP sẽ xuất ra những thông báo cho bạn biết xuất hiện lỗi ở dòng nào và lý do lỗi ( khá chung chung)
Bạn xem đoạn code sau :
Code:
print "Hello World;
?>
Nhìn vào sẽ thấy ngay đoạn code này thiếu dấu nháy cuối chuỗi ở print "Hello World;
Và khi chạy PHP sẽ tặng bạn 1 thông báo thế này :
Code:
Parse error: syntax error, unexpected $end in D:\xampp\htdocs\broken.php on line 5
Code:
?>
Và khi PHP báo lỗi ở dòng :
Code:
?>
Đây là những cặp dấu bao thông dụng , rất thường bị lỗi unexpected $end .
Quote
[ ]
{ }
" "
' '
{ }
" "
' '
Bạn xem đoạn code sau:
Code:
$yourName = "Jordan";
if $yourName == "Jordan")
{
echo "Hello $yourName";
}
?>
Nhìn vào ta sẽ thấy lệnh if có lỗi thiếu ( . Và đúng như thế PHP sẽ báo lỗi thế này
Code:
Parse error: syntax error, unexpected T_VARIABLE, expecting '(' in D:\xampp\htdocts\broken.php on line 4
Một lỗi cũng hay gặp là thiếu dấu ; ở cuối câu lệnh . Với lỗi này thì PHP sẽ báo lỗi ở dòng phía sau dòng có lỗi . Vì thế nên kiểm tra trước sau trên dưới cẩn thận.
Sử dụng var_dump()
Hàm này rất hữu dụng khi ta cần sửa các logic error . Khi cần biết 1 biến đang chứa những gì bên trong và kiểu dữ liệu của nó ta cứ var_dump in nó ra xem xét
VD :
Code:
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
?>
Sẽ cho ra :
Code:
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}
PHP Việt Nam
Nguyễn Đình Thắng @ 09:33 23/02/2010
Số lượt xem: 765
Số lượt thích:
0 người
 
- Cơ bản ASP.NET (23/02/10)
- Sử dụng CDONTS gửi thư với định dạng text bình thường. (23/02/10)
- Lập trình ASP - Mở cửa sổ mới ở trạng thái Maximize (23/02/10)
- Pascal Study 1.00 - làm quen với lập trình (22/02/10)
- Các đoạn mẫu JavaScript (30/11/09)






























h


">




