EverKB

Knowledge Base Ever

Không thể chụp lỗi cấp độ FATAL với set_error_handler()

2019-11-19 01:52:19

Nhãn: PHP, set_error_handler, Fatal Errors, register_shutdown_function, error_get_last,

Sử dụng set_error_handler() trong PHP để thực hiện các chức năng xử lý lỗi tùy chỉnh là một kỹ thuật rất hữu ích. Tuy nhiên, set_error_handler() không bắt lỗi nghiêm trọng.

Như được mô tả trong tài liệu PHP, các lỗi sau không thể được xử lý bởi các hàm do người dùng định nghĩa.
E_ERROR
E_PARSE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_STRICT
Nhưng bằng cách sử dụng register_shutdown_function() và error_get_last() cùng nhau để bắt lỗi E_ERROR nghiêm trọng và hướng nó đến một trình xử lý lỗi tùy chỉnh. Mã dưới đây cho thấy kỹ thuật này.
set_error_handler('exception_handler');

register_shutdown_function('shutdown_handler');

function exception_handler($err_no, $err_str, $err_file, $err_line)
{
    error_reporting(0);

    // save error log
    // ...

    error_reporting(E_ALL);
}

function shutdown_handler()
{
    $error = error_get_last();
    if (empty($error)) {
        return;
    }
    error_reporting(0);

    // save error log
    // ...

    error_reporting(E_ALL);
}

Nhãn

CentOS7 CentOS PHP Linux Python Python3 MySQL MariaDB YUM JavaScript HTML mysql_native_password PHP7 CSS Redis MySQL8 caching_sha2_password libpython3.7m.so.1.0 PHPStorm ss5-3.8.9 Apache2.4 Elasticsearch NodeJs show VIM CURLOPT_POSTFIELDS Failed to build these modules: _ctypes Minimal ISO substr Bluetooth INTERVAL PECL SQL Date Funcitons Wi-Fi date sub font-size root Tag Cloud CodeIgniter Laravel ss5 apache httpd dual network interfaces horiz-align node.js ShadowsocksR vertical-align CURLFille mb_substr PyCharm SUBDATE BarManager exec IntelliJIDEA PEAR SOCKS5 Proxy Server WebStorm date add find remi Tag Chrome jQuery PHP5.5 src Apache du hide nginx Shadowsocks-Python V2Ray cURL MariaDB10.4 PostgreSQL sub folder availability eth0 Install MongoDB pdo_sqlsrv SOCKS5 Web Server date File Upload mssql-tools register_shutdown_function Symfony JetBrain php-fpm sqlsrv Zend Framework ADDDATE DevExpress height network interface Shadowsocks-Libev unixODBC-devel Port 80 string Aura error_get_last INDENTIFIED BY password policy requirements SOCKS Web Development data Fedora Media Writer msodbcsql Redis5 SVN jemalloc SQLAlchemy absolute Deepin FuelPHP mysqlclient Shadowsocks toggle convert margin PHPUnit Framework ss5.passwd at-symbol Error Control Operator IIS password SOCKET vps daemon process Fatal Errors MongoDB4 sudoers center Phalcon SQL Server 2017 WiFi .htaccess DATE_SUB frequency conflict set_error_handler TestCase Compiling PHP PHPUnit ss5.conf apr Elasticsearch7.3 HTTP particles.js Slim Vincent Garreau daemon Failed to build these modules: _uuid MongoDB Sudo ip command pg_bha.conf SQL Server width DATE_ADD Frameworks MySQL-python scrollbar Tcp BBR Compiling Apache

Bài viết mới nhất