При разработке приложения на Symfony бывают ситуации, когда на странице получаем «белый экран» без описания ошибок, и в логах тоже пусто. Это так называемые «фатальные ошибки», которые можно отловить, но для этого надо задействовать перехватчик ошибок.
Без плагинов можно сделать следующее.
Способ №1: используем перехватчик ошибок
Листинг 1: Добавляем в файлы index.php и frontend_dev.php
error_reporting(E_ALL); ini_set('log_errors', 'On'); ini_set('display_errors', 'Off'); ini_set('error_log', '../logs/fatal_server.log');
Способ №2: воспользоваться плагинами Symfony
• sfErrorHandlerPlugin
Декабрь 19th, 2008 at 11:48
Спасибо, в копилку
Я до сих пор использовал настройку в .htaccess
php_flag display_errors on
php_value error_reporting 2047
Но это не кошерно, т.к. включает ошибки и для frontend
Декабрь 19th, 2008 at 12:37
Вообще рекомендую указать в настройках php.ini параметр
error_log = «/home/fatal_error.log», т.к. иногда забываешь прописать, а где-то не указаны обработчики. Таким образом можно обработать все сайты и скрипты.
Декабрь 19th, 2008 at 14:08
@Ingvar, нудобно это. Потом разбиратся что от какого хоста пришло…
При log_errors все эти ошибки попадают в error_log апача, который настраивается для виртуального хоста.
Декабрь 19th, 2008 at 14:58
2solenko: отнюдь. Если использовать первый вариант, то ошибки сохраняются в отдельный файл для данного сайта, в общий список не попадают. К тому же чаще это надо для разработки локально. Мне это только помогает
Декабрь 20th, 2008 at 08:57
@ingvar, вы устанавливаете настройку в php.ini, т.е. она повлияет на все хосты с PHP. Каким образом это соотносится с
«то ошибки сохраняются в отдельный файл для данного сайта, в общий список не попадают. «?
«К тому же чаще это надо для разработки локально. »
А какая разница? Или вы на локальном компе не поднимаете virtual host? Или у вас в работе в каждый момент времени только один проект?
Декабрь 20th, 2008 at 11:31
2solenko. Использую virtual host. Согласен, что если сыпеться все общий файл, то разобрать неудобно. Поэтому переназначаю для текущего проекта в папку logs. И прописываю в php.ini. Почему? Иногда, где-то провтыкаешь, где-то не будет обработчика, а так видно, что была проблема. Мне лично это помогает.
Декабрь 20th, 2008 at 12:45
lngvar, я не могу понять как вы в php.ini прописываете спецефические для хоста настройки. Возможно я просто чего-то не знаю. Или у вас отдельный php.ini для каждого хоста?
Декабрь 20th, 2008 at 13:06
2solenko. Рассказываю еще раз, а то мы не поняли друг друга :).
1) В php.ini я указываю параметр error_log = “/home/fatal_all_error.log”. Да, это глобальная настройка, для всех хостов. Если будут возникать проблемы, то все будет сыпаться в общий файл fatal_all_error.log. Иногда это помогает. Почему? Часто ошибка содержить полный путь к скрипту, где возникла эта самая ошибка.
2) Ранее я писал на CodeIgniter, теперь на Symfony, но принцип тот же. Я для Симфони в файл web/index.php вставляю в самый вверх кусок кода:
error_reporting(E_ALL);
ini_set('log_errors', 'On');
ini_set('display_errors', 'Off');
ini_set('error_log', '../logs/fatal_server.log');
Папка logs — это папка для конкретного сайта, куда складываются логи от Апача: access, error.
Что имеем в итоге, что все фатальные ошибки записываются только в fatal_server.log, если же забыли где-то его указать, или используете другое приложение, то они появяться в fatal_all_error.log.