2015-06-01 2 views
8

Я присоединился к этой сумасшедшей компании в качестве администратора сайта. Теперь я сделал некоторые изменения в моих конфигурациях db, которые повлияли на выполнение скриптов PHP.Как увидеть ошибки, подавленные '@'?

Странная часть - это скрипты PHP, которые просто умирают. Они не бросают никаких ошибок. Когда я вошел в скрипты, я понял, что они использовали директиву @ error suppression. Теперь вся база кода - это миллион строк, распространяемых по тысячам файлов, и не хотите запускать что-то вроде sed для замены «@».

Но «@» сделало отладку невозможной для меня. Подобные разработчики закрывают глаза и видят, что темные ночи говорят о своей ночи.

Есть ли способ, который я могу отменить подавление ошибок, сделанные '@', и разрешить директиву php log. Прикосновение к кодовой базе не является вариантом. Я с нетерпением жду способа, которым я могу это сделать, изменяя конфигурацию php или добавляя несколько строк в файл начальной загрузки.

+0

Что случилось с поиском и заменой? конечно, проще, чем исправление PHP-движка. –

+0

Просто заменив «@» на «», он заменит его также в местах, которые он не используется для подавления. Скажите файл, содержащий идентификатор электронной почты или код регулярного выражения, подтверждающий это. – codersofthedark

+0

вкратце, не заменяйте его в строках и комментариях. выполнимый в .. давайте заодно .. час? –

ответ

5

Если у вас установлено и включено Xdebug (в разработке, вам необходимо), вы можете установить опцию конфигурации xdebug.scream, которая отключает @ -оператор.

В качестве альтернативы, scream PECL extension также отключает @ -оператор (и это все, что он делает).

В основном вы устанавливаете расширение, а затем устанавливаете значение scream.enabled ini в значение true/on.

4

Отключенные ошибки все еще видны для обработчика, установленного через set_error_handler. Таким образом, вы можете просто добавить что-то подобное для вашего загрузочного файла:

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    echo "$errstr at $errfile($errline)\n"; 
}); 

или, лучше,

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 1, $errfile, $errline); 
}); 

, который также будет отображать стек.

Смежные вопросы