Хранение объекта исключения PHP в базе данных - PullRequest
1 голос
/ 17 марта 2012

Мне нужно сохранить объект исключения PHP в столбце mysql. Это для автономной системы регистрации ошибок. Обычно я бы просто serialize() объект Exception и покончил бы с этим, но половину времени, при попытке сделать это, я получаю следующую ошибку:

Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «Сериализация« Закрытие »не разрешена»

Я не уверен, как заставить это работать последовательно. Я буду очень признателен всем, у кого есть ответ на эту проблему.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 марта 2012

Объект исключения, подлежащий регистрации, содержит экземпляр класса Closure, реализацию PHP анонимных функций и закрытие .Очевидно, что анонимные функции не могут быть сериализованы.

Вам необходимо исследовать ваши классы исключений и посмотреть, должна ли какая-либо из них содержать их.Как правило, классы исключений не должны иметь анонимную функцию как свойство.

Это воспроизводит то же сообщение об ошибке, что и ваш случай:

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

Так что копайтесь в вашем коде, коде вашей платформы,код вашей библиотеки и попытайтесь выяснить, какой класс исключений имеет анонимную функцию в качестве свойства класса, кто их назначил, почему, и тогда вы сможете создать специальный случай для него.

Надеюсь, это поможет.

0 голосов
/ 17 марта 2012

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

Вот функция определения глобального обработчика ошибок.Вы можете определить глобальный обработчик ошибок и заставить его записать описание ошибки в базу данных.

И структура класса исключения:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...