Выпекаем сайты, находим покупателей

Класс отправки 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.
Теперь отслеживать ошибки - гораздо проще!

Комментарии и отзывы к материалу

Открыта вакансия на первого комментатора!

Отправить комментарий

Как зовут?

Сообщение