Foren / National / Russian / Идеи / Отлов фатальных ошибок (#776)

написание хендлера для красивого и правильного http ответа если на сайте произошла критическая ошибка.

Macik
#1 13. Dezember 2011, 21:51

Очередной раз при отдадке увидел:


2011-12-13 21:43

Fatal error: Could not connect to database !
Please check your settings in the file datas/config.php
MySQL error : SQLSTATE[28000] [1045] Access denied for user 'db_usr'@'localhost' (using password: YES)

#0  cot_diefatal(Could not connect to database !

		Please check your settings in the file datas/config.php

		MySQL error : SQLSTATE[28000] [1045] Access denied for user 'db_usr'@'localhost' (using password: YES)) called at [site\system\common.php:87]
#1  require_once(site\system\common.php) called at [site\index.php:37]

и родилась идея... создать правильный отлов таких (и прочих фатальных) ошибок.

Вот тут очень хорошо об этом написано: http://habrahabr.ru/blogs/php/134499/

На словах и в примерах кода все довольно просто. Думаю в реализации тоже не сильно проблемно. Зато добавит + движку. И предотвратит утекание ненужной информации налево.

А если при этом еще и отдавать правильный код в HTTP ответе (например 503 Service Unavailable (Сервис недоступен)), то и для всяких роботов хорошо будет.

 

 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F

Dieser Beitrag wurde von Macik (am 20. Dezember 2011, 00:07, vor 12 Jahre) bearbeitet
esclkm
#2 14. Dezember 2011, 06:38

согласен - еще в статью не вчитывался - но идея мне понравилась! записать ошибку в файл - а узеру показать красивую фигу

littledev.ru - мой маленький зарождающийся блог о котонти.
снижение стоимости программирования и снижение стоимости производства разные вещи. Первое можно скорее сравнить с раздачей работникам дешевых инструментов, чем со снижением зарплаты
Moool13
#3 14. Dezember 2011, 11:53

Но при этом надо, чтобы админ смог увидеть ошибку

Trustmaster
#4 14. Dezember 2011, 14:14

Давно об этом думал, но пока останавливало то, о чём Moool13 сказал :) То есть, куда писать ошибки и в каком формате, чтобы админ их смог быстро найти и проанализировать.

May the Source be with you!
Macik
#5 14. Dezember 2011, 14:15
#32057 Moool13:

Но при этом надо, чтобы админ смог увидеть ошибку

Для этого и пишем в файл. К тому же если ошибка критическая можно хоть отправку емейла настроить.

(отписались практически одновременно)  Добавлю:

Для админа надо писать в лог site.ru/log/somename.log (имя лога можно задавать через config.php, чтобы обезапасить от стороннего просмотра),
можно в отдельную папку писать закрытую htaccess паролем.
Формат (для меня лично) особоразницы не имеет, plain-text как вариант, критические ошибки опционально (по настройке) отправлять мылом.

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

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F

Dieser Beitrag wurde von Macik (am 14. Dezember 2011, 22:44, vor 12 Jahre) bearbeitet
Trustmaster
#6 15. Dezember 2011, 14:13

Теперь о граблях. Чтобы писать в site.ru/log/somename.log, нужно эту папку создать и выставить там права на запись - народ будет возмущён лишними телодвижениями. Далее, чтобы защитить папку паролем, надо во-первых чтобы вебсервер был Apache (в эпоху набирающего обороты nginx), а во-вторых надо этот пароль задать (опять лишние телодвижения для ленивых). Наконец, за этим логом надо будет следить и периодически его подчищать или архивировать. Вот это всё меня и останавливало.

В принципе, есть альтернатива: писать в стандартный лог ошибок PHP с помощью функции trigger_error(). При этом на production-сайтах, где выключен debug_mode, ошибки на экран не выводятся. Вместо них-то и можно показывать красивую заставку с 503-статусом.

May the Source be with you!
McDuck
#7 15. Dezember 2011, 19:38

Проще всего спрятать в html-comment на 503 странице. Админу достаточно просто просмотреть исходный текст

Moool13
#8 15. Dezember 2011, 20:13
#32106 McDuck:

Проще всего спрятать в html-comment на 503 странице. Админу достаточно просто просмотреть исходный текст

Думаешь другие этого не умеют?)

McDuck
#9 15. Dezember 2011, 20:44

2 Moool13

Думаю, это лучше (и красивее), чем выводить информацию об ошибке открыто на странице.

Macik
#10 15. Dezember 2011, 23:57
#32097 Trustmaster:

В принципе, есть альтернатива: писать в стандартный лог ошибок PHP с помощью функции trigger_error(). При этом на production-сайтах, где выключен debug_mode, ошибки на экран не выводятся. Вместо них-то и можно показывать красивую заставку с 503-статусом.

Разумное решение. Лишних настроек нет. А админу один фиг - если на продакшене что-то упало надо будет разбираться и в логи залезать. 

https://github.com/macik
правильный хостинг — https://goo.gl/fjCa1F
Trustmaster
#11 16. Dezember 2011, 07:57

Значит так и сделаем.

May the Source be with you!