Làm thế nào để bạn sử dụng PHP để xử lý các ngoại lệ?

Trên thực tế, việc hiển thị lỗi trong quá trình sản xuất có thể đưa ra gợi ý lớn về lỗ hổng của trang web của bạn đối với tin tặc hoặc người dùng ác ý

Để làm điều này, bạn có thể chỉnh sửa 3 cài đặt trong php của mình. ini

  • display_errors nếu được đặt thành false, nó sẽ chặn lỗi;
  • log_errors lưu lỗi vào một tệp nhật ký;
  • error_reporting định cấu hình loại lỗi nào kích hoạt báo cáo;

Chức năng xử lý lỗi

PHP có một số chức năng có thể xử lý lỗi và thực hiện các tác vụ dễ dàng trong phần này, bạn sẽ tìm thấy mô tả ngắn gọn cho từng chức năng.

  • debug_•backtrace[] nó chấp nhận một số tham số như cờ của tùy chọn và một số giới hạn kết quả và tạo bản tóm tắt về cách tập lệnh của bạn đến được vị trí của nó, nó trả về một biến mảng;
  • debug_•print_•backtrace[] nó hoạt động theo cách tương tự như cách trước nhưng thay vì tạo một mảng dấu vết, nó in chúng theo thứ tự thời gian đảo ngược;
  • error_•get_•last[] nó trả về một mảng kết hợp chứa thông tin về lỗi cuối cùng xảy ra trong tập lệnh;
  • error_•clear_•last[] đặt lại nhật ký lỗi nội bộ của PHP, nếu được sử dụng trước error_get_last[] thì cái sau sẽ trả về null;
  • error_•log[] nó yêu cầu một thông báo bắt buộc như một tham số và gửi nó đến các quy trình xử lý lỗi đã xác định;
  • error_•reporting[] Chức năng này yêu cầu không có hoặc không có hằng số lỗi làm tham số [bạn có thể tìm thấy danh sách đầy đủ tại đây https. //www. php. net/manual/en/errorfunc. hằng số. php ] và đặt mức độ chính xác mà ứng dụng PHP phải có khi xử lý lỗi;
  • set_•error_•handler[] và set_•Exception_•handler[] đặt các hàm riêng biệt để xử lý lỗi và ngoại lệ;
  • restore_•error_•handler[] và restore_•Exception_•handler[] nó được sử dụng sau set_•error_•handler[] và set_•Exception_•handler[] nó nhằm mục đích hoàn nguyên trình xử lý về trình xử lý lỗi trước đó, nó có thể là trình xử lý được tạo
  • trigger_•error[] chức năng này gây ra lỗi bằng cách chấp nhận một thông báo là tham số bắt buộc và cờ của error_type là tùy ý;
  • user_•error[] bí danh của trigger_•error[];


Hướng dẫn sử dụng PHP cung cấp toàn bộ danh sách hằng số được xác định trước mà bạn có thể sử dụng làm cờ trong một số hàm ở trên

ngoại lệ là gì


Ngoại lệ là tính năng tương đối mới của PHP, chúng chỉ được triển khai trong PHP 5 nhưng chúng nhanh chóng trở thành một phần cốt lõi của bất kỳ tập lệnh lập trình hướng đối tượng nào.

Ngoại lệ là trạng thái của tập lệnh cần được xử lý đặc biệt vì tập lệnh không chạy như dự kiến.

Cả Lỗi và Ngoại lệ chỉ là các lớp triển khai giao diện Có thể ném.

Giống như bất kỳ lớp nào khác trong thế giới OOP, lớp này có thể được mở rộng,

cho phép tạo phân cấp lỗi và tạo tùy chỉnh theo cách bạn xử lý ngoại lệ

Một điều cần chú ý và có thể dẫn đến lỗi và hiểu lầm là bạn không thể khai báo lớp của riêng mình và sau đó quyết định ném ngoại lệ

Các lớp duy nhất có thể đưa ra lỗi là những lớp triển khai lớp Có thể ném

Hãy chơi một trò chơi, nhìn vào mã và trả lời câu hỏi sau.

class MainException extends Exception {}
class SubException extends MainException {}

try {
    throw new SubException["SubException thrown"];
} catch [MainException $e] {
    echo "MainException thrown" . $e->getMessage[];
} catch [SubException $e] {
    echo "SubException thrown" . $e->getMessage[];
} catch [Exception $e] {
    echo "Exception thrown" . $e->getMessage[];
}


Ngoại lệ nào được đưa ra?

Trong ví dụ bên dưới, ngoại lệ được ném là SubException, nó kế thừa từ MainException mở rộng Ngoại lệ

Khối được đánh giá từ khối đầu tiên [khối trên cùng] đến khối cuối cùng và khi ngoại lệ khớp với tên của lớp đã cho thì nó được kích hoạt

Xử lý lỗi là quá trình bắt lỗi do chương trình của bạn đưa ra và sau đó thực hiện hành động thích hợp. Nếu xử lý sai sót không đúng cách có thể dẫn đến nhiều hệ lụy không lường trước được

Rất đơn giản trong PHP để xử lý lỗi

Sử dụng hàm die[]

Trong khi viết chương trình PHP của bạn, bạn nên kiểm tra tất cả các tình trạng lỗi có thể xảy ra trước khi tiếp tục và thực hiện hành động thích hợp khi được yêu cầu

Hãy thử ví dụ sau mà không cần /tmp/test. xt và với tệp này

Bằng cách này bạn có thể viết một mã hiệu quả. Sử dụng kỹ thuật trên, bạn có thể dừng chương trình của mình bất cứ khi nào nó bị lỗi và hiển thị thông báo thân thiện với người dùng và có ý nghĩa hơn

Xác định chức năng xử lý lỗi tùy chỉnh

Bạn có thể viết chức năng của riêng mình để xử lý bất kỳ lỗi nào. PHP cung cấp cho bạn một khung để xác định chức năng xử lý lỗi

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];
Sr. STT Thông số và Mô tả 1

error_level

Bắt buộc - 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ị

2

thông báo lỗi

Bắt buộc - Chỉ định thông báo lỗi cho lỗi do người dùng xác định

3

error_file

Tùy chọn - Chỉ định tên tệp xảy ra lỗi

4

error_line

Tùy chọn - Chỉ định số dòng xảy ra lỗi

5

error_context

Tùy chọn - 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

Các mức lỗi có thể xảy ra

Các mức 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. Các giá trị này cab được sử dụng kết hợp bằng cách sử dụng. nhà điều hành

Sr. NoConstant & DescriptionValue1

E_ERROR

Lỗi thời gian chạy nghiêm trọng. Việc thực thi tập lệnh bị tạm dừng

12

E_WARNING

Lỗi thời gian chạy không nghiêm trọng. Việc thực thi tập lệnh không bị dừng

23

E_PARSE

Lỗi phân tích thời gian biên dịch. Lỗi phân tích cú pháp chỉ nên được tạo bởi trình phân tích cú pháp

44

E_NOTICE

Thông báo thời gian chạy. Tập lệnh đã tìm thấy thứ gì đó có thể là lỗi nhưng cũng có thể xảy ra khi chạy tập lệnh bình thường

85

E_CORE_ERROR

Các lỗi nghiêm trọng xảy ra trong quá trình khởi động ban đầu của PHP

166

E_CORE_WARNING

Lỗi thời gian chạy không nghiêm trọng. Điều này xảy ra trong quá trình khởi động ban đầu của PHP

327

E_USER_ERROR

Lỗi nghiêm trọng do người dùng tạo. Đây giống như một E_ERROR do lập trình viên đặt bằng hàm trigger_error[] của PHP

2568

E_USER_WARNING

Cảnh báo không gây tử vong do người dùng tạo. Đây giống như một E_WARNING do lập trình viên đặt bằng hàm trigger_error[] của PHP

5129

E_USER_NOTICE

Thông báo do người dùng tạo. Đây giống như một E_NOTICE do lập trình viên đặt bằng hàm trigger_error[] của PHP

102410

E_STRICT

Thông báo thời gian chạy. Cho phép PHP đề xuất các thay đổi đối với mã của bạn, điều này sẽ đảm bảo khả năng tương tác tốt nhất và khả năng tương thích về phía trước của mã của bạn

204811

E_RECOVERABLE_ERROR

Lỗi nghiêm trọng có thể bắt được. Điều này giống như E_ERROR nhưng có thể bị xử lý bởi người dùng do người dùng xác định [xem thêm set_error_handler[]]

409612

E_ALL

Tất cả các lỗi và cảnh báo, ngoại trừ mức E_STRICT [E_STRICT sẽ là một phần của E_ALL kể từ PHP 6. 0]

8191

Tất cả các mức lỗi trên có thể được đặt bằng hàm thư viện tích hợp PHP sau trong đó mức cab là bất kỳ giá trị nào được xác định trong bảng trên

int error_reporting [ [int $level] ]

Sau đây là cách bạn có thể tạo một hàm xử lý lỗi -

Error: [$errno] $errstr - $error_file:$error_line";
      echo "
"; echo "Terminating PHP Script"; die[]; } ?>

Khi bạn xác định trình xử lý lỗi tùy chỉnh của mình, bạn cần đặt nó bằng cách sử dụng hàm set_error_handler trong thư viện PHP tích hợp. Bây giờ hãy kiểm tra ví dụ của chúng ta bằng cách gọi một hàm không tồn tại

Error: [$errno] $errstr - $error_file:$error_line";
      echo "
"; echo "Terminating PHP Script"; die[]; } //set error handler set_error_handler["handleError"]; //trigger error myFunction[]; ?>

Xử lý ngoại lệ

PHP 5 có một mô hình ngoại lệ tương tự như mô hình của các ngôn ngữ lập trình khác. Các ngoại lệ rất quan trọng và cung cấp khả năng kiểm soát tốt hơn đối với việc xử lý lỗi

Hãy giải thích có từ khóa mới liên quan đến ngoại lệ

  • Try - Một hàm sử dụng ngoại lệ phải nằm trong khối "thử". Nếu ngoại lệ không kích hoạt, mã sẽ tiếp tục như bình thường. Tuy nhiên, nếu ngoại lệ kích hoạt, một ngoại lệ sẽ bị "ném"

  • Ném - Đây là cách bạn kích hoạt một ngoại lệ. Mỗi lần "ném" phải có ít nhất một lần "bắt"

  • Catch - Một khối "catch" truy xuất một ngoại lệ và tạo một đối tượng chứa thông tin ngoại lệ

Khi một ngoại lệ được đưa ra, mã theo sau câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối bắt khớp đầu tiên. Nếu một ngoại lệ không bị bắt, Lỗi nghiêm trọng PHP sẽ được đưa ra với thông báo "Ngoại lệ chưa được bắt

  • Một ngoại lệ có thể được ném và bị bắt ["bắt"] trong PHP. Mã có thể được bao quanh trong một khối thử

  • Mỗi lần thử phải có ít nhất một khối bắt tương ứng. Nhiều khối bắt có thể được sử dụng để bắt các loại ngoại lệ khác nhau

  • Các ngoại lệ có thể được ném [hoặc ném lại] trong một khối bắt

Ví dụ

Sau đây là đoạn mã, sao chép và dán mã này vào một tệp và xác minh kết quả

getMessage[], "\n";
   }
   
   // Continue execution
   echo 'Hello World';
?>

Trong ví dụ trên, hàm $e->getMessage được sử dụng để nhận thông báo lỗi. Có các hàm sau có thể được sử dụng từ lớp Ngoại lệ

  • getMessage[] - thông báo ngoại lệ

  • getCode[] - mã ngoại lệ

  • getFile[] − tên tệp nguồn

  • getLine[] − dòng nguồn

  • getTrace[] − n mảng của backtrace[]

  • getTraceAsString[] − chuỗi theo dõi được định dạng

Tạo Trình xử lý ngoại lệ tùy chỉnh

Bạn có thể xác định trình xử lý ngoại lệ tùy chỉnh của riêng mình. Sử dụng chức năng sau để đặt chức năng xử lý ngoại lệ do người dùng xác định

string set_exception_handler [ callback $exception_handler ]

Ở đây Exception_handler là tên của hàm được gọi khi xảy ra ngoại lệ chưa được phát hiện. Chức năng này phải được xác định trước khi gọi set_Exception_handler[]

Làm cách nào để ném một ngoại lệ trong PHP?

Ném một ngoại lệ PHP chung gần như đơn giản như nó có vẻ. Tất cả những gì cần làm là khởi tạo một đối tượng ngoại lệ—với tham số đầu tiên của hàm tạo Ngoại lệ là thông báo lỗi—và sau đó, "ném" nó . Điều quan trọng nhất cần lưu ý là thông điệp.

2 cách tôi có thể xử lý ngoại lệ là gì?

Java cung cấp hai tùy chọn khác nhau để xử lý một ngoại lệ. Bạn có thể sử dụng phương pháp thử-bắt-cuối cùng để xử lý tất cả các loại ngoại lệ. Hoặc bạn có thể sử dụng phương pháp thử tài nguyên cho phép quy trình dọn dẹp tài nguyên dễ dàng hơn.

Chủ Đề