相信在写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 */
}