Я унаследовал сайт, который использует PEAR для обработки всех вызовов БД.
Это пример того, как он обрабатывает запрос:
$result = $conn->query($sql);
if(PEAR::isError($result))
{
die('<b>Error:</b> '.$result->getMessage().'
<br/><b>Debug Info</b>: '.$result->getDebugInfo());
}
$row = $result->fetchRow(DB_FETCHMODE_ASSOC);
Это именно такна сотнях страниц этого сайта.Проблема заключается в том, что всякий раз, когда возникает какая-либо ошибка БД (например, ошибка синтаксиса SQL), он отображает ВСЮ ошибку и связанный запрос непосредственно пользователю из-за $result->getDebugInfo()
, что является большим НЕТ-НЕТ дляочевидные причины безопасности.
Вместо того, чтобы показывать ошибку моим пользователям, я хочу, чтобы сайт просто отправлял мне электронные письма всякий раз, когда возникает ошибка БД, и отправлял мне по электронной почте содержимое $result->getDebugInfo()
, а непоказ его пользователям, чтобы я мог быть предупрежден о проблеме и отладить ее, избегая при этом угрозы безопасности.
Теперь я подумал, что это будет так же просто, как поиск функции getDebugInfo()
в библиотеке PEAR.и изменить его, чтобы сделать выше, но это не сработало, что очень озадачивает.Я нашел функцию только в одном месте, которое было основным файлом класса PEAR.php, и оно выглядит так:
function getDebugInfo()
{
return $this->getUserInfo();
}
Независимо от того, какие изменения я внесу в эту функцию, они НЕ отражаются, когда $result->getDebugInfo()
называется в сценарии, который невероятно озадачивает и заставляет меня вырывать волосы.Я даже пытался закомментировать функцию ВЕСЬ, и она ЕЩЕ отображает код ошибки для моих пользователей, как если бы это был HAL, и он полностью контролировал свои действия, пока я его маленький миньон.Поговорим о недоумении (я теперь лысый)!
Так как же мне заставить мой сайт перестать показывать ошибку PEAR и код SQL моим пользователям и вместо этого отправлять мне по электронной почте?