PHP display_errors = 0 не соблюдается

Я использую CodeIgniter и добавил следующие строки в свой index.php:

error_reporting(E_ALL ^ E_NOTICE); 
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/php_errors.log');

Однако по какой-то причине PHP все равно всегда отображает предупреждения/ошибки и не создает журнал в доступном для записи каталоге. Я знаю, что приведенный выше код работает, потому что, если я удалю часть «^ E_NOTICES» и повторю отправку, я увижу массу уведомлений. Я также бросил оператор die() после приведенного выше кода, чтобы убедиться, что он попал. Наконец, я проверил всю кодовую базу, чтобы убедиться, что «display_errors» не используется позже в коде, перезаписав мое значение 0.

Есть ли что-то еще, что я мог упустить, что мешает мне остановить отображение ошибок?


person Anthony    schedule 11.02.2013    source источник
comment
Проверьте настройки php.ini, являются ли ваши настройки PHP_INI_USER или PHP_INI_ALL. В противном случае вы не сможете изменить их из своего скрипта.   -  person crackmigg    schedule 12.02.2013
comment
В документации сказано, что оба аргумента ini_set должны быть строками, ваш второй аргумент — целое число. Я понятия не имею, имеет ли это значение, но вы можете попробовать поставить кавычки вокруг 0.   -  person kba    schedule 12.02.2013
comment
@migg Держу пари, ты на правильном пути, но я не могу найти ничего подобного в своем php.ini. Вы знаете, что это за атрибут?   -  person Anthony    schedule 12.02.2013
comment
@kba К сожалению, я пробовал все варианты. Однако оцените предложение.   -  person Anthony    schedule 12.02.2013
comment
Я действительно думаю, что это что-то конкретное для CodeIgniter. Некоторые комментаторы на askaboutphp.com/172/codeigniter-handling-errors.html заметил ту же проблему, с которой столкнулся я — CodeIgniter игнорирует настройки php_ini. Не уверен, как он это делает, но, по-видимому, он делает. :)   -  person Anthony    schedule 12.02.2013
comment
Итак, не зная CodeIgniter, я бы предположил, что он меняет ваши настройки после того, как вы их сделали?   -  person crackmigg    schedule 12.02.2013
comment
@migg Да, хотя я думал, что придется сделать ini_set. Я проверил кодовую базу и не увидел ее, но, как указывает fab, возможно, это было сделано по-другому.   -  person Anthony    schedule 12.02.2013


Ответы (1)


Вы должны искать «set_error_handler» в исходном коде CodeIgniter. Похоже, что их обработчик ошибок учитывает параметр error_reporting, но не параметр display_errors, что является распространенной ошибкой. См. также: Учитывает ли пользовательский обработчик ошибок PHP Конфигурация PHP?

person Fabian Schmengler    schedule 12.02.2013