Php nhận thông báo cảnh báo

Khi viết mã phía máy chủ bằng PHP, bạn nên xem xét bảo mật trước tiên. Khi xử lý các lỗi PHP có thể xảy ra trong thời gian chạy, bạn nên ẩn các thông báo lỗi này khỏi người dùng và thay vào đó hãy ghi chúng vào một tệp để nhà phát triển hoặc quản trị viên hệ thống xem xét chúng. Đây là một biện pháp bảo mật tốt vì các thông báo lỗi có thể làm lộ ra một lỗ hổng hiện có hoặc cung cấp cho kẻ tấn công một điểm xâm nhập vào hệ thống của bạn

Nói đủ rồi, làm thế nào chúng ta có thể làm điều đó một cách hiệu quả và hiệu quả?

Chúng tôi sẽ tạo một lớp sẽ được gọi mỗi khi xảy ra lỗi trong hệ thống

  • Nếu bạn đang sử dụng MVC, hãy đặt mã này ở đầu tệp chỉ mục chính của bạn
  • Nếu bạn không sử dụng MVC, hãy đặt mã này ở đầu mỗi tệp PHP mà bạn muốn xử lý lỗi

include('.php');
if (ERR_HANDLER_ENABLED) { 
    register_shutdown_function('sysFatalErr'); 
    set_error_handler('sysErrorhandler'); 
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Lớp này thu thập tất cả các lỗi được báo cáo từ tập lệnh PHP, phân loại chúng thành lỗi chung hoặc lỗi nghiêm trọng. Sau khi phân loại, nó chuyển lỗi sang phương thức tương ứng, sau đó gọi hàm nhật ký ghi chúng ra

Hãy xác định một số biến không đổi ở đây

/**
 * if your error class file resides in a folder called classes and the index file is in the base folder use:
 *
 * define('ERR_HANDLER_PATH', substr(dirname(__file__), 0, strpos(dirname(__file__), 'classes') - 1) . '/'); // DO NOT change!!
 * 
 * after using the above line comment or remove the fisrt line down here
**/
define('ERR_HANDLER_PATH', dirname(__file__).'/'); // DO NOT change!!
define('ERR_HANDLER_LOG_FOLDER', 'logs'); // Name of logs folder. Create if it does not exist.
define('ERR_HANDLER_ENABLED', 1); // Enable custom error handler?
define('ERR_HANDLER_DISPLAY', 1); // Display a message on screen?
define('ERR_APPEND_RAND_STRING', 0); // Adds random string to file name for security. Prevents someone attempting browser access.
define('MASK_FILE_PATH', 0); // Hide file path if error occurs..
define('FILE_ERR_LOG_FILE', 'errors.log'); // File name of error log
define('FILE_FATAL_ERR_LOG_FILE', 'fatal_errors.log'); // File name of fatal error log

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Chúng tôi tạo lớp của chúng tôi có bốn hàm và mỗi hàm gọi hàm nhật ký khi được gọi

  • generalErr - Hàm này được gọi khi xảy ra lỗi chung
  • mailErr - Chức năng này được gọi khi xảy ra lỗi email. (nếu bạn có kịch bản gửi email)
  • fataErr - Hàm này được gọi khi xảy ra lỗi nghiêm trọng và không thể thực hiện thêm nữa
  • log - gọi hàm ghi, sau đó ghi lỗi vào một tệp

class Errs {

  public function generalErr($error) {
    Errs::log($error, FILE_ERR_LOG_FILE);
  }

  public function mailErr($error) {
    Errs::log($error, FILE_ERR_LOG_FILE);
  }

  public function fatalErr($error) {
    Errs::log($error, FILE_FATAL_ERR_LOG_FILE);
  }

  public function log($error, $file) {
    if (is_dir(ERR_HANDLER_PATH . ERR_HANDLER_LOG_FOLDER)) {
      write(ERR_HANDLER_PATH . ERR_HANDLER_LOG_FOLDER . '/' . Errs::raStr() . $file, trim($error) . linending() . '***** - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - *****' . linending());
    }
  }

  public function raStr() {
    return (ERR_APPEND_RAND_STRING ? substr(md5(uniqid(rand(),1)), 3, 30) . '-' : '');
  }


}

// Initiate the class..
$DDEH = new Errs();

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bây giờ chúng tôi kiểm tra xem trình xử lý lỗi đã được bật chưa. Nếu nó được kích hoạt, chúng tôi tắt hiển thị tất cả các lỗi cho người dùng

if (ERR_HANDLER_ENABLED) {
  // Switch off display errors
  @ini_set('display_errors', 0);
  // Set error reporting level..
  error_reporting(E_ALL);
}

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Ở các cấp báo cáo Lỗi, chúng tôi sẽ sử dụng E_ALL. PHP cung cấp rất nhiều trong số chúng mà bạn có thể xem tại đây PHP Error Levels.
Đây chỉ là một số lỗi mà tôi nghĩ là hữu ích cùng với mã lỗi của chúng.

LỗiMã lỗiMô tảE_ERROR1Lỗi thời gian chạy nghiêm trọng có thể được khôi phục, Việc thực thi tập lệnh bị dừng ngay lập tứcE_WARNING2Cảnh báo thời gian chạy, không nghiêm trọng và hầu hết các lỗi rơi vào đây, quá trình thực thi không bị dừngE_NOTICE8Thông báo thời gian chạy cho biết đã gặp phải điều gì đó có thể là lỗi khi chạy tập lệnh thông thườngE_COMPILE_ERROR64Lỗi nghiêm trọng mà

TIỀN BOA. Truyền giá trị (-1) cho hàm error_reporting() sẽ hiển thị mọi lỗi có thể xảy ra khi các cấp độ và hằng số mới được thêm vào trong các phiên bản PHP trong tương lai