[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Свой обработчик ошибок
GET
Подумываю помимо стандартной защиты от несуществующей страницы добавить свой обработчик ошибок такого вот вида:


function my_error($error, $msg, $file, $line)
{
if (error_reporting() == 0) return;
if ($_SESSION['login']=='ABC')
{
print '<div style="border-style:inset; border-width:2">';
print "Code error:<b>$error</b>!<br>";
print "Fail name: <tt>$file</tt>, str: $line.<br>";
print "Text error: <i>$msg</i>";
print "</div>";
}
else
{
exit(file_get_contents('./error.html'));
}
}

set_error_handler("my_error", E_ALL);


Т.е. при появлении ошибки вылетит страница ./error.html - все лучше, чем злой человек узнает как у меня файлик называется. Но если на сайте буду я - $_SESSION['login']=='ABC', то в случае ошибки, которых быть как бы и не должно, но все же (!) я увижу детальную инфу по ней.

Что по этому поводу думаете?

PS: Я знаю, что: следующие типы ошибок не могут быть обработаны пользовательской функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR и E_COMPILE_WARNING.



Спустя 46 минут, 33 секунды (16.11.2010 - 13:48) Белый Тигр написал(а):
Помоему хорошее решение. Только зачем в начале?
if (error_reporting() == 0) return;

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

Спустя 19 минут, 55 секунд (16.11.2010 - 14:08) ABC написал(а):
Белый Тигр
Ну да...ошибки я думаю отключать ошибки не стоит, какой бы сайт надежный не казался...

Спустя 4 часа, 55 минут, 52 секунды (16.11.2010 - 19:04) Белый Тигр написал(а):
Отключать не стоит только для вас smile.gif Для остальных пользователей можно смело делать return; и всё.

Спустя 52 минуты, 26 секунд (16.11.2010 - 19:56) twin написал(а):
Цитата
Но если на сайте буду я - $_SESSION['login']=='ABC', то в случае ошибки, которых быть как бы и не должно, но все же (!) я увижу детальную инфу по ней.
А если не будешь?
Ошибки нужно логировать, чтобы можно было проанализировать потом и исправить.

Спустя 6 часов, 33 минуты, 40 секунд (17.11.2010 - 02:30) ABC написал(а):
twin
Создать файлик типа *.log и туда записывать вот такие ошибки прежде чем вылетит моя страничка './error.html'

Я правильно понял?

Это же отличная мысль!

Спустя 25 минут, 4 секунды (17.11.2010 - 02:55) kirik написал(а):
A.B.C.
Можно не писать свой велосипед, а пользоваться тем что дает тебе php.
В php.ini есть директивы: display_errors (показывать ошибки), log_errors (логировать ошибки), error_log (путь до файла-лога). Так вот на продакшене отрубаешь display_errors и все. Показываться ошибки не будут, но будут писаться в лог. Кстати можно еще выключить html_errors.
Эти директивы можно прописать в htaccess или/и проставить через ini_set(). Еще есть пара интересных директив: ignore_repeated_errors (не записывать/показывать повторяющиеся ошибки) и ignore_repeated_source (не записывать/показывать ошибки из одних и тех же файлов).

Спустя 9 минут, 45 секунд (17.11.2010 - 03:05) ABC написал(а):
kirik
спасибо!...
А может ли хакер добраться до htaccess?

Спустя 15 минут, 3 секунды (17.11.2010 - 03:20) kirik написал(а):
Цитата (A.B.C. @ 16.11.2010 - 19:05)
А может ли хакер добраться до htaccess?

Конечно может. Хакер все может, если ему дать волю smile.gif

Спустя 1 минута, 57 секунд (17.11.2010 - 03:22) ABC написал(а):
kirik
А как защитить этот файл?...атрибутами?...в смысле к изменению и т.д.

Спустя 54 минуты, 14 секунд (17.11.2010 - 04:16) kirik написал(а):
Цитата (A.B.C. @ 16.11.2010 - 19:22)
А как защитить этот файл?...атрибутами?...в смысле к изменению и т.д.

Ну да, а по другому никак и не сможешь smile.gif

Спустя 1 час, 43 минуты, 13 секунд (17.11.2010 - 05:59) Paha4 написал(а):
Исключения тебе в помощь, сын мой, да прибудет тебе клиентская обработка ошибок biggrin.gif

Спустя 2 часа, 41 минута, 21 секунда (17.11.2010 - 08:41) ABC написал(а):
Спасибо

...еще бы вот узнать как чужой IP привязать к err-логам...ну типа дата и время ошибки..ее тип - и ip того кто ее вызвал?

Спустя 27 минут, 13 секунд (17.11.2010 - 09:08) Белый Тигр написал(а):
Такое можно делать только с собственным обработчиком ошибок. Хватать ошибку и писать её в свой лог, попутно занося туда $_SERVER['REMOTE_ADDR']. Но мне кажется что проще посмотреть время интересующей вас ошибки и глянуть то же время в логах веб-сервера.

Спустя 44 минуты, 5 секунд (17.11.2010 - 09:52) ABC написал(а):
Белый Тигр
А если пользоаетелей будет 1000 в этот момент...
Наверное правильнее вести 2 лога один родной (PHP_errors.log/(www))- через .htaccess
php_flag log_errors on
php_value error_log /PHP_errors.log


один собственный(www/my_site/PHP_errors_2.log), к тому же его можно ввести в удобной таблице, только вот насколько сильно все это дело будет тормозить работу скрипта? Да и функцию включения этого пользовательского лога придется, как я понимаю, прописывать в каждом подключаемом скрипте???

Скажем в 1.php есть:
function error();
include'2.php';

, а в 2.php
include'3.php';


в 3.php произойдет ошибка - результат отобразится?

Спустя 1 час, 33 минуты, 20 секунд (17.11.2010 - 11:25) kirik написал(а):
Цитата (A.B.C. @ 17.11.2010 - 01:52)
А если пользоаетелей будет 1000 в этот момент...

А если будет столько пользователей, то у тебя уже не будет возникать мысли о том, как вести логи wink.gif

Цитата (A.B.C. @ 17.11.2010 - 01:52)
только вот насколько сильно все это дело будет тормозить работу скрипта?

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

Цитата (A.B.C. @ 17.11.2010 - 01:52)
в 3.php произойдет ошибка - результат отобразится?

Ээм.. ну а ты как думаешь? smile.gif

Спустя 3 часа, 41 минута (17.11.2010 - 15:06) Белый Тигр написал(а):
Разместите функцию обработки ошибок в каком-нибудь файле который ко всем скриптам подключается. Чаще всего это конфиг.
Что касается выбора между файлом или таблицей, то тут без разницы. Сайт это точно грузить не будет если он у вас не сыпет ошибками. В таблицу данные конечно удобно писать, но это если вы захотите сделать в админке(или ещё где) просмотрщик ошибок. А если будете смотреть в ручную - пишите в файл.
Я бы ещё при ошибке дампил $_POST/$_GET/текущий URL т.к. это может помочь в некоторых ситуациях.

Спустя 11 часов, 24 минуты, 40 секунд (18.11.2010 - 02:31) ABC написал(а):
Всем огромное спасибо

Спустя 4 часа, 32 секунды (18.11.2010 - 06:31) Guest написал(а):
Помоему если надо везде включать лог отдельно, значит сайт организован плохо.
Тебе стоит глянуть в сторону классов ООП. Тамошняя стратегия обработки ошибок поможет понять, как правильно реорганизовать сайт.


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.