Лучший способ подавления ошибок php на производственных серверах - PullRequest
22 голосов
/ 01 декабря 2008

Каков наилучший способ скрыть ошибки php от отображения в браузере?

Будет ли использоваться следующее:

ini_set("display_errors", 1);

Буду признателен за любые советы по лучшей практике!

Я регистрирую ошибки, я просто хочу убедиться, что отключение (или 0) значения display_errors не предотвратит регистрацию ошибок.

Ответы [ 7 ]

46 голосов
/ 02 декабря 2008

Лучший способ - записывать свои ошибки, а не отображать или игнорировать их.

В этом примере ошибки журнала регистрируются в системном журнале, а не отображаются в браузере.

ini_set("display_errors", 0);
ini_set("log_errors", 1);

//Define where do you want the log to go, syslog or a file of your liking with
ini_set("error_log", "syslog"); // or ini_set("error_log", "/path/to/syslog/file");
3 голосов
/ 02 декабря 2008

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

2 голосов
/ 02 декабря 2008

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

if ( isset($_ENV['MY_APP_MODE']) && ($_ENV['MY_APP_MODE'] == 'devel') ) {
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}
1 голос
/ 02 декабря 2008

Файлы дистрибутива PHP, к сожалению, отправляют смешанное сообщение об обработке сообщений об ошибках. Файл php.ini по умолчанию содержит некоторые настройки, подходящие для рабочих серверов, а другие лучше для серверов разработки. Вы должны включить все ошибки в dev (error_reporting = E_ALL и display_errors = On) и выключить в prod (display_errors = off, но указать где-то log_errors). Тем не менее, сделайте все возможное, чтобы убедиться, что нет ошибок (или они обрабатываются).

1 голос
/ 02 декабря 2008

Вы также можете использовать apache .htaccess для регистрации ошибок, не касаясь вашего кода:

<IfModule mod_php5.c>
  php_flag      display_errors  Off
  php_flag      log_errors      On
  php_value     error_log       logs/errors
</IfModule>
0 голосов
/ 10 февраля 2019

Принятый ответ у меня вообще не работал на PHP 7.1.

Работает, как и ожидалось, на производстве, регистрируя ошибки в предоставленном файле и не отображая их пользователю:

    ini_set('display_errors', 'Off');
    ini_set('log_errors', 'On');
    ini_set("error_log", "/absolute/path/to/my/error_log");
0 голосов
/ 02 декабря 2008

Лучший способ? Исправьте ошибки!

Если вам нужно быстрое временное решение, тогда можно отключить display_errors, но убедитесь, что вы где-то его регистрируете, потому что в противном случае серьезные настройки / ошибки разбора будут молчать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...