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

时间:2012-03-17 06:22:39

标签: php exception

我需要在mysql列中存储PHP Exception对象。这是一个脱机错误记录系统。通常我只会serialize() Exception对象并完成它,但有一半时间,当我尝试这样做时,我收到以下错误:

  

致命错误:带有消息的未捕获异常'异常'   '不允许'序列化'关闭''

我不确定如何让它始终如一地运作。我将非常感谢能够解决这个问题的人。

感谢。

2 个答案:

答案 0 :(得分:4)

要记录的异常对象包含Closure类的实例,PHP的anonymous functions and closure实现。显然匿名函数无法序列化。

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

这会重现与您的案例相同的错误消息:

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

深入研究代码,框架的代码,库的代码,并尝试找出哪个异常类具有匿名函数作为类属性,谁分配它们,为什么 - 然后你应该能够创建一个特殊情况。

希望这有帮助。

答案 1 :(得分:0)

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

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

异常类的结构:

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