Класс отправки php, mysql, 404 ошибок в базу данных
Начал изучать ООП и первым делом - решил написать обработчик ошибок. Полезный класс в отладке скриптов, дополнительным плюсом идёт сокрытие текста ошибок от пользователей.Для работы нужна таблица, в ней будут хранится данные об ошибках
CREATE TABLE IF NOT EXISTS `er_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` set('php','mysql','404') NOT NULL,
`date` int(11) NOT NULL DEFAULT '0',
`url` varchar(255) NOT NULL,
`file` varchar(255) NOT NULL,
`line` int(11) NOT NULL,
`errno` int(11) NOT NULL,
`error` varchar(255) NOT NULL,
`desc` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
PHP класс, обрабатывающий ошибки и посылающий данные в базу
//Разрешение на запись логов
$log=1;
//Отключаем отображение ошибок на странице
ini_set('display_errors',0);
//Класс ошибок
class error{
//Передаём все php ошибки - методу php
function __construct($log){$this->log=$log;error_reporting(E_ALL);set_error_handler(array(&$this, 'php'));}
//Оошибки mysql. Данные исходят из mysql_errno() и mysql_error().
function mysql($errno,$error,$query){
if($this->log==1){mysql_query("INSERT INTO `er_data` VALUES(
NULL,
'mysql',
unix_timestamp(now()),
'".htmlspecialchars($_SERVER['REQUEST_URI'])."',
'{$_SERVER['PHP_SELF']}',
'',
'{$errno}',
'".htmlspecialchars($error)."',
'".htmlspecialchars($query)."')");}}
//Ошибки PHP.
function php($errno=0,$error,$file,$line=0,$errcontext){
if($this->log==1){mysql_query("INSERT INTO `er_data` VALUES(
NULL,
'php',
unix_timestamp(now()),
'".htmlspecialchars($_SERVER['REQUEST_URI'])."',
'{$file}',
'{$line}',
'{$errno}',
'".htmlspecialchars($error)."',
'')");}}
//Ошибка 404.
function e404(){
if($this->log==1){mysql_query("INSERT INTO `er_data` VALUES(
NULL,
'404',
unix_timestamp(now()),
'".htmlspecialchars($_SERVER['REQUEST_URI'])."',
'','','','','')");}
exit('Ошибка 404!');}
}
Использование
Создаём объект$error=new error($log);
1. Ошибки типа <PHP>, метод будет получать автоматически, благодаря функции set_error_handler(array(&$this, 'php')), которая перенаправляет все ошибки в заданный метод класса.2. Ошибки типа <MYSQL>, метод может получать путём вставки $error->mysql(mysql_errno(),mysql_error(),$query);, в местах предположительного возникновения ошибок.
Рекомендую использовать функцию, наподобие:
function query($query)
{$result=mysql_query($query);
if(!$result){$error->mysql(mysql_errno(),mysql_error(),htmlspecialchars($query))return false;}
return $result;}
3. Ошибки типа <404>, использовать аналогично mysql.Вот и всё. При желании, можно сделать включение лога отдельно для php, mysql, 404.
Теперь отслеживать ошибки - гораздо проще!
Похожие материалы
Комментарии и отзывы к материалу
Открыта вакансия на первого комментатора!Отправить комментарий
Как зовут?
Сообщение