如何将此错误记录到文本文件或数据库?
Fatal error: Call to undefined method PROJECTS::ssss()
答案 0 :(得分:9)
使用自定义错误处理程序处理致命错误不可能。
最好的解决方案是在php.ini中启用错误记录(例如syslog),然后使用logcheck / logsentry等工具接收有关异常syslog条目的定期电子邮件。
而不是syslog PHP也可以将错误记录到文件中 - 只需查看php.ini的错误记录选项。
log_errors = On
error_log = syslog
error_log = /path/to/some/folder/phperrors.log
显然,您只想使用其中一条error_log
行。
答案 1 :(得分:9)
有一种方法可以应对您的任务,实际上您可以在FATAL错误上设置自定义错误处理程序。
你可以这样做:
ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
$error = error_get_last();
//Do whatever you want with this error, for example:
YourDBApplicationLayer::writeFatal($error);
}
答案 2 :(得分:4)
现在在PHP 7中,可能捕获致命错误:
try {
ggggg(); // <---- make a fatal error
} catch(\Throwable $e) {
var_dump($e);
}
旧帖子catch(Error $e)
已更改为catch(\Throwable $e)
,但两者都有效
答案 3 :(得分:1)
您可以使用method overloading将所有 base 类属于超类:
class Base
{
public function __call($name)
{
MyLog::logError(...);
trigger_error("Function ".get_class($this)."::$name doesn't exist",
E_USER_ERROR);
}
}
尝试调用从Base
派生的类的不存在的方法最终将由Base::__call()
处理。因此,对于静态方法,有__callStatic()
(从PHP 5.3开始)。
答案 4 :(得分:0)
类似的东西:
if(!method_exists($obj, 'method')){
$db->log('What you want to log'); //log in your DB
error_log('message');//Write to php's error log
}