PHP: [Bug] Почему & quot; display_errors & quot; существует, если только & quot; error_reporting & quot; можете скрыть или показать ошибки?

РЕДАКТИРОВАТЬ: Моя среда выглядит следующим образом (это относится к
ответ):

  • Microsoft IIS 10.0 Express
  • Windows 7 Профессиональная SP1
  • Версия PHP 5.6.16 x86 FastCGI

Я пытаюсь выяснить, для чего предназначена настройка «display_errors».
В следующем коде я пытаюсь скрыть уведомление PHP это бросается в строке 9. Естественно, можно подумать, что просто установка

 display_errors = 'Off'

достиг бы этого, но это, кажется, не имеет никакого эффекта.

Я понимаю, что «error_reporting» позволяет вам выбрать который ошибки обнаруживаются, и «display_errors» определяет, отображаются ли сообщения об ошибках пользователю. Я ошибаюсь? В большинстве моих поисков в Google я вижу людей, которые настраивают и то и другое

error_reporting = 0

а также

display_errors = 'Off'

Но зачем вообще беспокоиться о

   display_errors = 'Off'

когда это никак не сказывается?

Мой тестовый код:

<?php
//ini_set("error_reporting", 0);
ini_set("display_errors", "Off");
ini_set("display_startup_errors", "Off");
date_default_timezone_set("America/Chicago");

echo "Hey<br />";

echo $myarr["hey"];

Когда я запускаю этот код, я вижу следующее сообщение об ошибке (это ссылка на изображение, так как у меня недостаточно репутации, чтобы разместить его здесь):

http://i.imgur.com/mupV8BO.png

PHP: сообщение об ошибке, сгенерированное для строки 9, должно быть скрыто от пользователя. Почему «display_errors» существует, если он ничего не делает?

0

Решение

После проб и ошибок и используя объяснения ShiraNai7, я обнаружил, что это ошибка в PHP на Microsoft IIS и FastCGI. Смотрите ссылку на ошибку:

Ошибка # 44729 display_errors = Off не соблюдается

https://bugs.php.net/bug.php?id=44729

2

Другие решения

Да, могут показаться ошибки PHP и их конфигурация немного действительно странно, если кто-то не знаком с внутренней работой. Там много чего происходит.

display_errors

  • контролирует, будет ли обработчик ошибок PHP по умолчанию печатать ошибки на выходе по мере их возникновения
    • коды ошибок подавляются error_reporting не будет напечатано
  • контролирует, печатает ли обработчик исключений по умолчанию PHP неперехваченные исключения в вывод

log_errors

  • контролирует, регистрирует ли обработчик ошибок PHP по умолчанию ошибки в error_log
    • коды ошибок подавляются error_reporting не будет зарегистрирован
  • контролирует, обрабатывает ли обработчик исключений по умолчанию PHP исключения в error_log

error_reporting

  • определяет глобальную маску для ошибок, о которых следует сообщать
  • эта опция используется обработчиком ошибок PHP по умолчанию (см. выше)
  • эта опция должна использоваться пользовательский обработчик ошибок тоже

set_error_handler()

  • определяет собственный обработчик ошибок
  • он всегда вызывается, если возникает ошибка (даже если она подавлена)
  • если он вернется falseбудет вызываться обработчик ошибок PHP по умолчанию (и печатать / регистрировать ошибки в соответствии с настройками)
  • если он вернется null или же true или выдает исключение, обработчик ошибок PHP по умолчанию НЕ будет вызываться (и, следовательно, он не будет ничего печатать / регистрировать).

set_exception_handler()

  • определяет пользовательский обработчик исключений
  • Обработчик исключений по умолчанию в PHP не будет вызываться, если определен пользовательский обработчик (и, следовательно, он не будет ничего печатать / регистрировать)

Но зачем вообще беспокоиться о «display_errors = ‘Off’», когда он все равно не дает эффекта?

Существуют комбинации вышеуказанных настроек, которые делают display_errors не бесполезно

Примеры:

  • display_errors должен быть off в php.ini на производственных серверах для предотвращения утечки потенциально конфиденциальных данных
    • ошибка / исключение может произойти, прежде чем вы сможете изменить какие-либо другие настройки
  • если вы хотите регистрировать ошибки, но не выводить их на выход, вы устанавливаете display_errors в off а также log_errors в on
  • если вы используете пользовательский обработчик ошибок, который печатает пользовательские сообщения об ошибках, но вы также хотите использовать error_log, Ты устанавливаешь display_errors в off
1

По вопросам рекламы [email protected]