Каковы причины, по которым PHP отображает ошибки даже при использовании error_reporting(0)?
-
09-06-2019 - |
Вопрос
Каковы причины, по которым PHP принудительно отображает ошибки, независимо от того, что вы ему приказываете отключить?
я пытался
error_reporting(0);
ini_set('display_errors', 0);
безуспешно.
Решение
Обратите внимание на предостережение в руководстве по адресу http://uk.php.net/error_reporting:
Большинство ошибок E_STRICT оцениваются во время компиляции, поэтому о таких ошибках не сообщается в файле, где error_reporting расширен за счет включения ошибок E_STRICT (и наоборот).
Если ваша базовая система настроена на сообщение об ошибках E_STRICT, они могут быть выведены еще до того, как ваш код будет рассмотрен.Не забывайте, что error_reporting/ini_set — это оценки во время выполнения, и все, что выполняется на этапе «до запуска», не увидит своего эффекта.
Судя по вашему комментарию, ваша ошибка...
Ошибка анализа:Синтаксическая ошибка, неожиданная t_variable, ожидая ',' или ';' In /usr/home/redacted/public_html/dev.php в строке 11
Тогда применяется та же общая концепция.Ваш код никогда не запускается, так как он синтаксически недействителен (вы забыли ';').Таким образом, ваше изменение отчета об ошибках никогда не встречается.
Чтобы исправить это, необходимо изменить отчеты об ошибках на уровне системы.Например, на Apache вы можете разместить...
php_value error_reporting 0
в файле .htaccess, чтобы подавить их все, но это зависит от конфигурации системы.
Прагматично: не пишите файлы с синтаксическими ошибками :)
Другие советы
Чтобы предотвратить появление ошибок, вы можете
- Напишите в .htaccess: php_flag display_errors 0
- Разделите свой код в отдельных модулях, где основной (родительский) файл PHP устанавливает только error_logging, а затем включите () другие файлы.
Использовать phpinfo найти загруженный php.ini и отредактировать его, чтобы скрыть ошибки.Он переопределяет то, что вы вставили в свой скрипт.
Является set_error_handler()
используется где-нибудь в вашем сценарии?Это переопределяет error_reporting(0)
.
Используйте log_errors, чтобы они регистрировались, а не отображались.
Если этот параметр указан в Apache с использованием php_admin_value, его нельзя изменить в .htaccess или во время выполнения.Видеть: http://docs.php.net/configuration.changes
Прагматично: не пишите файлы с синтаксическими ошибками :)
Чтобы убедиться в отсутствии синтаксических ошибок в вашем файле, выполните следующее:
php -l YOUR_FILE_HERE.php
Это выведет что-то вроде этого:
PHP Parse error: syntax error, unexpected '}' in Connection.class.php on line 31
Просто добавьте приведенный ниже код в свой index.php файл:
ini_set('display_errors', False);