Php no deprecated errors

Prevent E_DEPRECATED error messages in PHP

PHP 5.3 introduced a new error reporting level E_DEPRECATED which is triggered when deprecated functions and methods are used, such as the old style ereg() regular expression functions. This post shows how to suppress E_DEPRECATED error messages.

In PHP.ini

To show all errors other than E_DEPRECATED in the php.ini file, adjust the error_reporting setting as shown below. Note this should only be done for installs of PHP 5.3+.

error_reporting = E_ALL & ~E_DEPRECATED

To suppress notices as well:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED

In code with error_reporting

You can either straight out set the error reporting level like so:

error_reporting(E_ALL &~ E_DEPRECATED); error_reporting(E_ALL &~ E_NOTICE &~ E_DEPRECATED);

or remove E_DEPRECATED from the current error_reporting level:

error_reporting(error_reporting() & ~E_DEPRECATED);

Making it safe for earlier versions of PHP

The only catch with the above error_reporting examples is that if you’re running the same code on e.g. PHP 5.2 as well as PHP 5.3 then you’ll get a notice in PHP 5.2 (and earlier) like «Notice: Use of undefined constant E_DEPRECATED».

To avoid triggering this notice check if E_DEPRECATED is defined:

Development vs production

While you certainly won’t want to trigger E_DEPRECATED messages in production, you may well want to show them in development to make it easy to locate and update code with deprecated functions. (Note you can suppress the display of error messages regardless of the error_reporting level with display_errors).

Читайте также:  Type java util comparator cannot be resolved

In my case, I’ve been using SilverStripe 2.4 which occasionally makes use of the ereg() functions and I prefer not to have the messages displayed even in development. SS 3 will come out later this year and I’m sure they’ll have replaced the ereg functions with preg equivilents. Maybe then I’ll switch back E_DEPRECATED in development.

Источник

Блог

У меня есть производственный сервер, на котором запущено коммерческое программное обеспечение, использующее устаревшую функциональность. Мы уже отключили вывод ошибок в php.ini — display_errors = Off — поэтому пользователи не видят эти ошибки. Однако мы все еще регистрируем ошибки PHP — log_errors = On — для отслеживания проблем.

Проблема: PHP, похоже, игнорирует error_reporting директиву в отношении того, что она в конечном итоге передает в журнал ошибок. Независимо от того, какая комбинация значений введена, запись в файл происходит так, как будто для меня установлено значение E_ALL . Следовательно, мой журнал ошибок переполнен уведомлениями об устаревании.

В php.ini задано значение часового пояса по умолчанию, поэтому проблемы, связанные с часовым поясом, не имеют значения.

Обновления для программного пакета пока недоступны, поэтому, пожалуйста, никаких рекомендаций «просто исправьте устаревший код». Я специально ищу способы предотвратить сброс PHP устаревших ошибок в журнал, не отключая полностью ведение журнала файлов.

Комментарии:

1. Просто исправьте устаревший код. утки

2. Ты забавный, забавный человек, Томалак. 😛

Ответ №1:

Когда PHP запускается как модуль Apache, вы можете получить доступ / изменить любой параметр конфигурации, доступный в php.ini , используя директивы в файлах конфигурации Apache. Эти директивы являются…

Разница между php_* и php_admin_* версиями является ключом к этой проблеме. Значения, установленные с помощью php_admin_value и php_admin_flag , могут быть установлены только в конфигурациях Apache global и VirtualHost; они не переопределяются .htaccess или ini.set().

error_reporting() Функция эквивалентна ini_set() вызову и подпадает под те же правила.

Итак, я зашел в конфигурацию virtualhost для рассматриваемого сайта и добавил следующие строки…

 php_admin_value error_reporting 22527 php_admin_value error_log /custom/log/path/php_errors.log php_admin_flag log_errors On php_admin_flag display_errors Off 
  1. Первая строка — это побитовое значение для error_reporting = E_ALL amp; ~E_DEPRECATED . Я восстановил это значение, создав простой скрипт:
 ini_set("error_reporting", E_ALL amp; ~E_DEPRECATED); echo ini_get("error_reporting"); 

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

Более подробную информацию об изменении значений конфигурации за пределами php.ini можно найти в документации PHP.

Комментарии:

1. Спасибо за этот ответ. Однако, error_reporting = E_ALL amp; ~E_DEPRECATED amp; ~E_NOTICE не работает. phpinfo() получает правильное значение ( 22519 ). Но мой журнал все еще заполнен E_DEPRECATED . Есть идеи?

2. @пока вы когда-нибудь не найдете свой ответ?

3. @Ascherer у меня это тоже не работает.. Пока мне сходит с рук: tail -f /custom/log/file | grep -v «is deprecated occured»

4. Я согласен, это не работает с Apache 2.4. «/var/log/apache2/error.log» по-прежнему заполнен этими сообщениями.

Ответ №2:

Похоже, что само программное обеспечение может устанавливать уровень ошибки, таким образом переопределяя настройку в php.ini .

Кстати, если вы используете Cacti, смотрите здесь. Даже если вы не используете Cacti, я думаю, что это довольно хорошо подводит итог сценарию.

Ответ №3:

Вы можете использовать @ символ для подавления предупреждений (если не используется пользовательский обработчик ошибок), например:

 $var = @$_GET['something not set']; 

Тем не менее, вы должны использовать это с умом, это может легко вызвать проблемы и усложнить отладку.

Комментарии:

1. Не используйте @! Используйте настройки отчетов об ошибках PHP, чтобы показывать или скрывать предупреждения. При использовании @ вообще нет уведомления. Используя настройки отчетов об ошибках, вы можете записывать все ошибки в журнал ошибок, не показывая их. Таким образом, они не будут потеряны.

2. Во-первых, в моем посте есть довольно заметный отказ от ответственности. Во-вторых, между отключением всех ошибок и скрытием только одной известной ошибки, которая заполняет журналы, я бы выбрал последний подход. В-третьих… вы понимаете, что это ответ, который я написал 5 лет назад? С тех пор у нас было 6 основных версий PHP…

3. Иногда @ это полезно, особенно для файловых операций, когда команда может завершиться ошибкой, независимо от того, насколько упреждающей она является. Например, можно использовать file_exists для проверки наличия файла перед использованием file_get_contents , но файл может быть удален другим сеансом между ними, поэтому E_WARNING выдается.

Источник

Предопределённые константы

Перечисленные ниже константы всегда доступны как часть ядра PHP.

Замечание: Данные имена констант можно использовать в файле php.ini но не вне PHP, как например в файле httpd.conf , где вместо них необходимо использовать значения их битовых масок.

Ошибки и протоколирование
Значение Константа Описание Примечание
1 E_ERROR ( int ) Фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается.
2 E_WARNING ( int ) Предупреждения времени выполнения (не фатальные ошибки). Выполнение скрипта в таком случае не прекращается.
4 E_PARSE ( int ) Ошибки на этапе компиляции. Должны генерироваться только парсером.
8 E_NOTICE ( int ) Уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы.
16 E_CORE_ERROR ( int ) Фатальные ошибки, которые происходят во время запуска РНР. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются ядром PHP.
32 E_CORE_WARNING ( int ) Предупреждения (не фатальные ошибки), которые происходят во время начального запуска РНР. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются ядром PHP.
64 E_COMPILE_ERROR ( int ) Фатальные ошибки на этапе компиляции. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются скриптовым движком Zend.
128 E_COMPILE_WARNING ( int ) Предупреждения на этапе компиляции (не фатальные ошибки). Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются скриптовым движком Zend.
256 E_USER_ERROR ( int ) Сообщения об ошибках, сгенерированные пользователем. Такие ошибки схожи с E_ERROR , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
512 E_USER_WARNING ( int ) Предупреждения, сгенерированные пользователем. Такие предупреждения схожи с E_WARNING , за исключением того, что они генерируются в коде скрипта средствами функции PHP trigger_error() .
1024 E_USER_NOTICE ( int ) Уведомления, сгенерированные пользователем. Такие уведомления схожи с E_NOTICE , за исключением того, что они генерируются в коде скрипта, средствами функции PHP trigger_error() .
2048 E_STRICT ( int ) Включаются для того, чтобы PHP предлагал изменения в коде, которые обеспечат лучшее взаимодействие и совместимость кода.
4096 E_RECOVERABLE_ERROR ( int ) Фатальные ошибки с возможностью обработки. Такие ошибки указывают, что, вероятно, возникла опасная ситуация, но при этом, скриптовый движок остаётся в стабильном состоянии. Если такая ошибка не обрабатывается функцией, определённой пользователем для обработки ошибок (смотрите set_error_handler() ), выполнение приложения прерывается, как происходит при ошибках E_ERROR .
8192 E_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций. Включаются для того, чтобы получать предупреждения о коде, который не будет работать в следующих версиях PHP.
16384 E_USER_DEPRECATED ( int ) Уведомления времени выполнения об использовании устаревших конструкций, сгенерированные пользователем. Такие уведомления схожи с E_DEPRECATED за исключением того, что они генерируются в коде скрипта, с помощью функции PHP trigger_error() .
32767 E_ALL ( int ) Все поддерживаемые ошибки, предупреждения и замечания.

Представленные выше значения (как числовые, так и символьные) используются для задания битовой маски, определяющей об ошибках какого типа будет даваться отчёт. Вы можете использовать побитовые операторы, чтобы совмещать эти значения для указания определённых типов ошибок. Стоит отметить, что в php.ini допустимы только следующие операторы: ‘|’, ‘~’, ‘!’, ‘^’ и ‘&’.

Источник

Оцените статью