在数据库中存储PHP异常对象


Storing a PHP exception object in a database

我需要在mysql列中存储一个PHP Exception对象。它适用于离线错误记录系统。通常我只会serialize() Exception对象并处理它,但有一半时间,当尝试这样做时,我会得到以下错误:

致命错误:未捕获异常"exception",消息为"不允许序列化"Closure"

我不知道如何使这一点持续有效。如果有人能回答这个问题,我将不胜感激。

谢谢。

要记录的异常对象包含Closure类的一个实例、PHP的匿名函数和闭包的实现。显然,匿名函数无法序列化。

您需要调查您的异常类,看看是否有任何异常类应该包含它们。通常,异常类不应该将匿名函数作为属性。

这再现了与您的情况相同的错误消息:

$exception = new Exception('BOO');
$anonymousFunction = function() { echo 'blah'; };
$exception->anonymousFunction = $anonymousFunction;
serialize($exception);

因此,深入研究您的代码、框架的代码、库的代码,并尝试找出哪个异常类确实具有匿名函数作为类属性,是谁分配了它们,为什么分配了它们——然后您应该能够为它创建一个特例。

希望这能有所帮助。

http://php.net/manual/en/function.set-error-handler.php

这是全局错误处理程序定义函数。您可以定义一个全局错误处理程序,并将错误描述写入数据库。

以及异常类的结构:

http://php.net/manual/en/class.exception.php