EverKB

Knowledge Base Ever

ไม่สามารถจับภาพข้อผิดพลาดระดับ FATAL ด้วย set_error_handler()

2019-11-19 01:52:19

แท็ก: PHP, set_error_handler, Fatal Errors, register_shutdown_function, error_get_last,

การใช้ set_error_handler() ใน PHP เพื่อใช้ฟังก์ชั่นการจัดการข้อผิดพลาดที่กำหนดเองเป็นเทคนิคที่มีประโยชน์มาก อย่างไรก็ตาม set_error_handler() ไม่พบข้อผิดพลาดร้ายแรง

ตามที่อธิบายไว้ในเอกสารประกอบ PHP ข้อผิดพลาดต่อไปนี้ไม่สามารถจัดการได้โดยฟังก์ชั่นที่ผู้ใช้กำหนด
E_ERROR
E_PARSE
E_CORE_ERROR
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_STRICT
แต่ด้วยการใช้ register_shutdown_function() และ error_get_last() ร่วมกันเพื่อตรวจจับข้อผิดพลาด E_ERROR ที่ร้ายแรงและนำไปยังตัวจัดการข้อผิดพลาดที่กำหนดเอง รหัสด้านล่างแสดงเทคนิคนี้
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);
}

แท็ก

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

บทความล่าสุด