php源码-sapi中自定义错误输出

相信在写php代码的时候也都见过这样类似的错误提示输出

PHP Fatal error:  Unknown: EEEEEEEEEEEEEEEEEEE in Unknown on line 0
PHP Warning:  Swoole\Php\Runner::run() expects exactly 4 parameters, 0 given in /var/www/swoole/http_test.php on line 22

这个输出其实是通过 _sapi_module_struct.log_message来实现的

基本过程是这样,php抛出错误信息后,最终会调用 zend_error_cb 回调函数, 而每个sapi在启动的时候会把zend_error_cb 赋值为 php_error_cb()

其中
php_error_cb() 中会调用 php_log_err_with_severity() , 而php_log_err_with_severity() 中会调用 sapi_module.log_message()

sapi_module.log_message() 就是每个sapi自定义的 错误输出处理函数

比如fpm的sapi中的定义

//sapi/fpm/fpm/fpm_main.c 

static void sapi_cgi_log_message(char *message, int syslog_type_int)
{
    zlog(ZLOG_NOTICE, "PHP message: %s", message);
}

static sapi_module_struct cgi_sapi_module = {
    "fpm-fcgi",                     /* name */
    "FPM/FastCGI",                  /* pretty name */
    sapi_cgi_log_message,           /* Log message */
}

你可能感兴趣的:(php源码-sapi中自定义错误输出)