Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
| Имя | По умолчанию | Место изменения | Список изменений |
|---|---|---|---|
| error_reporting | NULL | PHP_INI_ALL | |
| display_errors | «1» | PHP_INI_ALL | |
| display_startup_errors | «1» | PHP_INI_ALL |
До PHP 8.0.0 значение по умолчанию было "0".
|
| log_errors | «0» | PHP_INI_ALL | |
| log_errors_max_len | «1024» | PHP_INI_ALL | |
| ignore_repeated_errors | «0» | PHP_INI_ALL | |
| ignore_repeated_source | «0» | PHP_INI_ALL | |
| report_memleaks | «1» | PHP_INI_ALL | |
| track_errors | «0» | PHP_INI_ALL | Объявлено устаревшим в PHP 7.2.0, удалено в PHP 8.0.0. |
| html_errors | «1» | PHP_INI_ALL | |
| xmlrpc_errors | «0» | PHP_INI_SYSTEM | |
| xmlrpc_error_number | «0» | PHP_INI_ALL | |
| docref_root | «» | PHP_INI_ALL | |
| docref_ext | «» | PHP_INI_ALL | |
| error_prepend_string | NULL | PHP_INI_ALL | |
| error_append_string | NULL | PHP_INI_ALL | |
| error_log | NULL | PHP_INI_ALL | |
| error_log_mode | 0o644 | PHP_INI_ALL | Доступно, начиная с PHP 8.2.0 |
| syslog.facility | «LOG_USER» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
| syslog.filter | «no-ctrl» | PHP_INI_ALL | Доступно, начиная с PHP 7.3.0. |
| syslog.ident | «php» | PHP_INI_SYSTEM | Доступно, начиная с PHP 7.3.0. |
Для подробного описания констант
PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных
директив.
-
error_reporting
int -
Задаёт уровень протоколирования ошибки. Параметр может быть либо числом,
представляющим битовое поле, либо именованной константой.
Соответствующие уровни и константы приведены в разделе
Предопределённые константы,
а также в php.ini. Для установки настройки во время выполнения используйте функцию
error_reporting(). Смотрите также описание директивы
display_errors.Значение по умолчанию равно
E_ALL.До PHP 8.0.0 значение по умолчанию было:
.E_ALL&
~E_NOTICE&
~E_STRICT&
~E_DEPRECATED
При этой настройке не отображаются уровни ошибокE_NOTICE,
E_STRICTиE_DEPRECATED.Замечание:
PHP-константы за пределами PHPИспользование PHP-констант за пределами PHP, например в файле
httpd.conf, не имеет смысла, так как в таких случаях требуются
целочисленные значения (int). Более того, с течением времени будут
добавляться новые уровни ошибок, а максимальное значение константы
E_ALLсоответственно будет расти. Поэтому в месте, где
предполагается указатьE_ALL, лучше задать большое целое число,
чтобы перекрыть все возможные битовые поля. Таким числом может быть, например,
2147483647(оно включит все возможные ошибки, не
толькоE_ALL). -
display_errors
string -
Эта настройка определяет, требуется ли выводить ошибки на экран вместе
с остальным выводом, либо ошибки должны быть скрыты от пользователя.Значение
"stderr"посылает ошибки в потокstderr
вместоstdout.Замечание:
Эта функциональность предназначена только для разработки и не должен использоваться в
готовых производственных системах (например, системах, имеющих доступ в интернет).Замечание:
Несмотря на то, что display_errors может быть установлена во время выполнения
(функцией ini_set()), это ни на что не повлияет, если в скрипте есть
фатальные ошибки. Это обусловлено тем, что ожидаемые действия программы во время
выполнения не получат управления (не будут выполняться). -
display_startup_errors
bool -
Даже если display_errors включена, ошибки, возникающие во время запуска PHP, не будут
отображаться. Настойчиво рекомендуем включать директиву display_startup_errors только
для отладки. -
log_errors
bool -
Отвечает за выбор журнала, в котором будут сохраняться сообщения об ошибках. Это
может быть журнал сервера или error_log.
Применимость этой настройки зависит от конкретного сервера.Замечание:
Настоятельно рекомендуем при работе на готовых работающих
web сайтах протоколировать ошибки там, где они отображаются. -
log_errors_max_len
int -
Задание максимальной длины log_errors в байтах. В
error_log добавляется информация
об источнике. Значение по умолчанию 1024. Установка значения в 0
позволяет снять ограничение на длину log_errors. Это ограничение
распространяется на записываемые в журнал ошибки, на отображаемые ошибки,
а также на $php_errormsg, но не на явно вызываемые функции,
такие как error_log().Если используется int, значение измеряется байтами. Вы также можете использовать сокращённую запись, которая описана в этом разделе FAQ.
-
ignore_repeated_errors
bool -
Не заносить в журнал повторяющиеся ошибки. Ошибка считается
повторяющейся, если происходит в том же файле и в той же строке, и если настройка
ignore_repeated_source выключена. -
ignore_repeated_source
bool -
Игнорировать источник ошибок при пропуске повторяющихся сообщений. Когда
эта настройка включена, повторяющиеся сообщения об ошибках не будут
заноситься в журнал вне зависимости от того, в каких файлах и строках они происходят. -
report_memleaks
bool -
Если настройка включена (по умолчанию), будет формироваться отчёт об утечках памяти,
зафиксированных менеджером памяти Zend. На POSIX платформах этот отчёт будет
направляться в поток stderr. На Windows платформах он будет посылаться в отладчик
функцией OutputDebugString(), просмотреть отчёт в этом случае можно с помощью утилит,
вроде » DbgView. Эта настройка имеет
смысл в сборках, предназначенных для отладки. При этом
E_WARNINGдолжна быть включена в список error_reporting. -
track_errors
bool -
Если включена, последняя произошедшая ошибка будет первой в переменной
$php_errormsg. -
html_errors
bool -
Если разрешена, сообщения об ошибках будут включать теги HTML. Формат для
HTML-ошибок производит нажимаемые ссылки, ведущие на описание ошибки, либо
функии, в которой она произошла. За такие ссылки ответственны
docref_root и
docref_ext.Если запрещена, то ошибки будут выдаваться простым текстом, без форматирования.
-
xmlrpc_errors
bool -
Если включена, то нормальное оповещение об ошибках отключается и, вместо него,
ошибки выводятся в формате XML-RPC. -
xmlrpc_error_number
int -
Используется в качестве значения XML-RPC элемента faultCode.
-
docref_root
string -
Новый формат ошибок содержит ссылку на страницу с описанием ошибки или
функции, вызвавшей эту ошибку. Можно разместить копию
описаний ошибок и функций локально и задать ini директиве значение
URL этой копии. Если, например, локальная копия описаний доступна по
адресу"/manual/", достаточно прописать
docref_root=/manual/. Дополнительно, необходимо
задать значение директиве docref_ext, отвечающей за соответствие
расширений файлов файлам описаний вашей локальной копии,
docref_ext=.html. Также возможно использование
внешних ссылок. Например,
docref_root=http://manual/en/или
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось
слешем"/". Тем не менее, бывают случаи, когда
это не требуется (смотрите выше, второй пример).Замечание:
Эта функциональность предназначена только для разработки, так как он облегчает
поиск описаний функций и ошибок. Не используйте его в готовых
производственных системах (например, имеющих доступ в интернет). -
docref_ext
string -
Смотрите docref_root.
Замечание:
Значение docref_ext должно начинаться с точки
".". -
error_prepend_string
string -
Строка, которая будет выводиться непосредственно перед сообщением об ошибке.
Используется только тогда, когда на экране отображается сообщение об ошибке.
Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке. -
error_append_string
string -
Строка, которая будет выводиться после сообщения об ошибке.
Используется только тогда, когда на экране отображается сообщение об ошибке.
Основная цель — добавить дополнительную HTML-разметку к сообщению об ошибке. -
error_log
string -
Имя файла, в который будут добавляться сообщения об ошибках. Файл
должен быть открыт для записи пользователем веб-сервера. Если
используется специальное значениеsyslog, то
сообщения будут посылаться в системный журнал. На Unix-системах это
syslog(3), на Windows NT — журнал событий. Смотрите также: syslog().
Если директива не задана, ошибки будут направляться в SAPI журналы.
Например, это могут быть журналы ошибок Apache или поток
stderrкомандной строки CLI.
Смотрите также функцию error_log(). -
error_log_mode
int -
Режим файла, описанного в error_log.
-
syslog.facility
string -
Указывает, какой тип программы регистрирует сообщение.
Действует только в том случае, если опция error_log установлена в «syslog». -
syslog.filter
string -
Указывает тип фильтра для фильтрации регистрируемых сообщений.
Разрешённые символы передаются без изменений; все остальные записываются в шестнадцатеричном представлении с префиксомx.-
all– строка будет разделена
на символы новой строки и все символы будут переданы без изменений
-
ascii– строка будет разделена
на символы новой строки, а любые непечатаемые 7-битные символы ASCII будут экранированы
-
no-ctrl– строка будет разделена
на символы новой строки, а любые непечатаемые символы будут экранированы
-
raw– все символы передаются в системный
журнал без изменений, без разделения на новые строки (идентично PHP до 7.3)
Параметр влияет на ведение журнала через error_log установленного в «syslog» и вызовы syslog().
Замечание:
Тип фильтра
rawдоступен начиная с PHP 7.3.8 и PHP 7.4.0.
Директива не поддерживается в Windows.
-
-
syslog.ident
string -
Определяет строку идентификатора, которая добавляется к каждому сообщению.
Действует только в том случае, если опция error_log установлена в «syslog».
cjakeman at bcs dot org ¶
13 years ago
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.
This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set
display_errors On
then there is a possible solution suggested under error_reporting:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("file_with_errors.php");
?>
[Modified by moderator]
You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).
ohcc at 163 dot com ¶
6 years ago
If you set the error_log directive to a relative path, it is a path relative to the document root rather than php's containing folder.
iio7 at protonmail dot com ¶
1 year ago
It's important to note that when display_errors is "on", PHP will send a HTTP 200 OK status code even when there is an error. This is not a mistake or a wrong behavior, but is because you're asking PHP to output normal HTML, i.e. the error message, to the browser.
When display_errors is set to "off", PHP will send a HTTP 500 Internal Server Error, and let the web server handle it from there. If the web server is setup to intercept FastCGI errors (in case of NGINX), it will display the 500 error page it has setup. If the web server cannot intercept FastCGI errors, or it isn't setup to do it, an empty screen will be displayed in the browser (the famous white screen of death).
If you need a custom error page but cannot intercept PHP errors on the web server you're using, you can use PHPs custom error and exception handling mechanism. If you combine that with output buffering you can prevent any output to reach the client before the error/exception occurs. Just remember that parse errors are compile time errors that cannot be handled by a custom handler, use "php -l foo.php" from the terminal to check for parse errors before putting your files on production.
Roger ¶
3 years ago
When `error_log` is set to a file path, log messages will automatically be prefixed with timestamp [DD-MMM-YYYY HH:MM:SS UTC]. This appears to be hard-coded, with no formatting options.
php dot net at sp-in dot dk ¶
8 years ago
There does not appear to be a way to set a tag / ident / program for log entries in the ini file when using error_log=syslog. When I test locally, "apache2" is used.
However, calling openlog() with an ident parameter early in your script (or using an auto_prepend_file) will make PHP use that value for all subsequent log entries. closelog() will restore the original tag.
This can be done for setting facility as well, although the original value does not seem to be restored by closelog().
jaymore at gmail dot com ¶
6 years ago
Document says
So in place of E_ALL consider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647 (includes all errors, not just E_ALL).
But it is better to set "-1" as the E_ALL value.
For example, in httpd.conf or .htaccess, use
php_value error_reporting -1
to report all kind of error without be worried by the PHP version.
Хостинг-провайдеры нередко отключают или блокируют вывод всех ошибок и предупреждений. Такие ограничения вводятся не просто так. Дело в том, что на рабочих серверах крайне не рекомендуется держать ошибки в открытом доступе. Информация о неисправностях может стать «наживкой» для злоумышленников.
При этом в процессе разработки сайтов и скриптов, очень важно отслеживать возникающие предупреждения. Знать о сбоях и неисправностях также важно и системным администраторам — это позволяет предотвратить проблемы на сайте или сервере.
Самый оптимальный вариант — не просто скрыть показ ошибок, но и настроить запись о них в логах. Это позволит отслеживать предупреждения и не подвергать сервер угрозе.
В статье мы расскажем, как включить и отключить через .htaccess вывод ошибок php, а также двумя другими способами — через скрипт PHP и через файл php.ini.
Обратите внимание: в некоторых случаях изменение настроек вывода возможно только через обращение в техническую поддержку хостинга.
Через .htaccess
Перейдите в каталог сайта и откройте файл .htaccess.
Вариант 1. Чтобы включить вывод, добавьте следующие строки:
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
Чтобы отключить ошибки PHP htaccess, введите команду:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
Также выключить .htaccess display errors можно командой:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
Через логи PHP
Если вам нужно проверить или выключить ошибки только в определенных файлах, это можно сделать с помощью вызова PHP-функций.
Вариант 1. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
А для всех типов, исключая тип Notice, так:
error_reporting(E_ALL & ~E_NOTICE)
Чтобы отключить вывод, введите команду:
Чтобы отключить логирование повторяющихся ошибок, введите:
# disable repeated error logging
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on
Вариант 2. Чтобы проверить конкретный кусок кода, подойдет команда ниже. В зависимости от типа ошибок, которые вы хотите увидеть, в скобках подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
ini_set('display_errors', 'On')
error_reporting(E_ALL)
После этого в консоли введите:
ini_set('display_errors', 'Off')
Вариант 3. Ещё один из вариантов подключения через скрипт:
php_flag display_startup_errors on
php_flag display_errors on
Для отключения укажите:
php_flag display_startup_errors off
php_flag display_errors off
Вариант 4. Чтобы настроить вывод с логированием через конфигурацию веб-сервера, введите:
- для Apache —
ErrorLog «/var/log/apache2/my-website-error.log», - для Nginx —
error_log /var/log/nginx/my-website-error.log.
Подробнее о других аргументах читайте в документации на официальном сайте php.net.
Через файл php.ini
Настроить отслеживание также можно через файл php.ini. Этот вариант подойдет, когда отображение или скрытие ошибок нужно настроить для всего сайта или кода. Обратите внимание: возможность настройки через файл php.ini есть не у всех, поскольку некоторые хостинг-провайдеры частично или полностью закрывают доступ к файлу.
Вариант 1. Если у вас есть доступ, включить вывод можно командой:
После этого нужно перезагрузить сервер:
sudo apachectl -k graceful
Вариант 2. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, после знака = подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
error_reporting = E_ALL
display_errors On
После ввода перезагрузите сервер:
sudo apachectl -k graceful
Чтобы скрыть отображение, во второй строке команды укажите Оff вместо On:
Теперь вы знаете, как настроить не только через PHP и php.ini, но и через htaccess отображение ошибок.
I have some PHP code. When I run it, a warning message appears.
How can I remove/suppress/ignore these warning messages?
![]()
asked Jan 1, 2010 at 0:32
1
You really should fix whatever’s causing the warning, but you can control visibility of errors with error_reporting(). To skip warning messages, you could use something like:
error_reporting(E_ERROR | E_PARSE);
Sean Bright
117k17 gold badges136 silver badges145 bronze badges
answered Jan 1, 2010 at 0:37
Tatu UlmanenTatu Ulmanen
122k34 gold badges185 silver badges184 bronze badges
4
You can put an @ in front of your function call to suppress all error messages.
@yourFunctionHere();
![]()
Mark Amery
137k78 gold badges401 silver badges450 bronze badges
answered Jan 1, 2010 at 0:41
PetPaulsenPetPaulsen
3,3622 gold badges22 silver badges32 bronze badges
11
To suppress warnings while leaving all other error reporting enabled:
error_reporting(E_ALL ^ E_WARNING);
![]()
Mark Amery
137k78 gold badges401 silver badges450 bronze badges
answered Feb 11, 2011 at 8:08
![]()
KarthikKarthik
1,3883 gold badges16 silver badges29 bronze badges
If you don’t want to show warnings as well as errors use
// Turn off all error reporting
error_reporting(0);
Error Reporting — PHP Manual
![]()
MD XF
7,6927 gold badges40 silver badges68 bronze badges
answered Jan 22, 2013 at 3:16
mohan.gademohan.gade
1,0651 gold badge9 silver badges15 bronze badges
0
If you want to suppress the warnings and some other error types (for example, notices) while displaying all other errors, you can do:
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
answered Jan 10, 2018 at 17:13
![]()
zstatezstate
1,9051 gold badge17 silver badges20 bronze badges
in Core Php to hide warning message set error_reporting(0) at top of common include file or individual file.
In WordPress hide Warnings and Notices add following code in wp-config.php file
ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
answered May 12, 2017 at 5:04
1
I do it as follows in my php.ini:
error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
This logs only fatal errors and no warnings.
honk
8,76711 gold badges79 silver badges79 bronze badges
answered Feb 27, 2018 at 8:43
navidnavid
8978 silver badges18 bronze badges
0
Not exactly answering the question, but I think this is a better compromise in some situations:
I had a warning message as a result of a printf() statement in a third-party library. I knew exactly what the cause was — a temporary work-around while the third-party fixed their code. I agree that warnings should not be suppressed, but I could not demonstrate my work to a client with the warning message popping up on screen. My solution:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
Warning was still in page source as a reminder to me, but invisible to the client.
FelixSFD
5,93210 gold badges46 silver badges115 bronze badges
answered Dec 30, 2012 at 20:03
DaveWalleyDaveWalley
80710 silver badges22 bronze badges
4
I think that better solution is configuration of .htaccess In that way you dont have to alter code of application. Here are directives for Apache2
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
answered May 10, 2014 at 16:34
![]()
You could suppress the warning using error_reporting but the much better way is to fix your script in the first place.
![]()
Dharman♦
29.2k21 gold badges79 silver badges131 bronze badges
answered Jan 1, 2010 at 0:34
![]()
PekkaPekka
438k140 gold badges968 silver badges1083 bronze badges
1
There is already answer with Error Control Operator but it lacks of explanation. You can use @ operator with every expression and it hides errors (except of Fatal Errors).
@$test['test']; //PHP Notice: Undefined variable: test
@(14/0); // PHP Warning: Division by zero
//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error: Uncaught Error: Call to undefined function customFuntion()
For debugging it’s fast and perfect method. But you should never ever use it on production nor permanent include in your local version. It will give you a lot of unnecessary irritation.
You should consider instead:
1. Error reporting settings as mentioned in accepted answer.
error_reporting(E_ERROR | E_PARSE);
or from PHP INI settings
ini_set('display_errors','Off');
2. Catching exceptions
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}
answered May 24, 2020 at 3:28
![]()
JsowaJsowa
8,0264 gold badges46 silver badges55 bronze badges
Источники: https://perishablepress.com/advanced-php-error-handling-via-htaccess/ и https://perishablepress.com/how-to-enable-php-error-logging-via-htaccess/
В этом уроке мы научимся такой вещи как сокрытие ошибок PHP. Попутно мы также разберём, как не просто подавлять вывод этих ошибок, но и как записывать их в файл журнала, как защитить этот файл журнала, как настроить уровень сообщения об ошибках PHP (насколько серьёзные ошибки показывать, показывать ли предупреждения), научимся устанавливать максимальный размер строки ошибки и отключим запись повторяющихся ошибок.
PHP ошибки выдают самую разнообразную информацию, которая позволяет нападающим собрать данные о вашем сайте и вашем сервере. Но если бы на этот вопрос был однозначный ответ «да», то всё решалось бы добавлением в каждый файл с программами PHP одной единственной строки
error_reporting(0);
На самом деле, все ошибки, в том числе и предупреждения (некритические ошибки) нужно выводить на стадии тестирования. Вывод ошибок и предупреждения также поможет разобраться в имеющихся (или возможных) проблемах в рабочем окружении. Не стоит подавлять вывод ошибок и предупреждений в программах, предназначенных для свободного распространения, поскольку при возникновении проблем все репорты пользователей о проблемах будут одинаковыми: «там белый экран», что сильно затруднит попытки разобраться.
В общем, на серверах, предназначенных для разработки (например, на домашнем сервере), не нужно убирать ошибки и предупреждения PHP методами error_reporting(0); и @ — нужно изучить их причины и исправлять исходный код.
На рабочих серверах крайне рекомендуется не показывать всем ошибки, которые возникли в PHP коде, но рекомендуется не просто подавлять их показ, но ещё и вести их лог, записывать для системного администратора и для программиста на PHP — из этих логов они получат важную информацию о возможных проблемах на сайте/сервере.
Как включить журналирование ошибок PHP посредством .htaccess
В этой части урока я покажу пользователям Apache как подавить вывод ошибок PHP и скрыть их от посетителей, при этом будет включена запись PHP ошибок для их дальнейшего анализа, вся эта настройка будет осуществлена через файл .htaccess.
Вообще, этот способ обладает ещё одним замечательным плюсом — вместо того, чтобы пытаться переловить все PHP ошибки и предупреждения, мы каждое из них будем записывать в наш личный лог, благодаря этому не ускользнёт ни одна возникшая ошибка, даже если она возникла не у вас, а у кого-то посетителя вашего сайта при условиях которые, может быть, вам бы даже и в голову не пришли для моделирования. Благодаря магической мощи файла .htaccess есть простой способ реализовать эту эффективную стратегию.
Прячем PHP ошибки от посетителей
Есть разные способы подавить ошибки PHP посредством .htaccess. Это можно сделать включением следующих директив .htaccess в файл вашего домена httpd.conf или в корневую (или любую другую целевую директорию) файла .htaccess со следующим содержимым:
# подавить ошибки php php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off php_value docref_root 0 php_value docref_ext 0
Это приведёт к тому, что PHP ошибки больше не будут публичными на вашем сайте. Это исключает потенциальные риски безопасности, и не даёт этим уродским, непонятным PHP ошибках поломать вёрстку вашего сайта и дезориентировать ваших посетителей. Редактирования кода для этого не требуется.
Включение личного журнала PHP ошибок
Теперь, когда мы спрятали PHP ошибки от общественности, давайте включим их журналирование (запись), чтобы мы могли их отследить. Это делается добавлением следующих директив .htaccess к файлу вашего домена httpd.conf или в ваш файл .htaccess, который размещён в корневой (или любой целевой) директории.
# включение записи PHP ошибок php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log
Чтобы это заработало, вам нужно отредактировать путь в последней строчке в соответствии с действительным расположением вашего файла PHP_errors.log. Конечно, вместе с этим вам нужно создать этот файл и дать ему разрешения 755 или, если необходимо, 777. Наконец, вам нужно обезопасить этот файл журнала, добавив эти завершающие строки кода в ваш файл .htaccess:
# предотвращаем доступ к логу PHP ошибок
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Теперь, когда всё на месте, проверьте, что всё работает как следует, вызовите несколько ошибок PHP. Вы также, возможно, захотите проверить защиту вашего файла журнала, попробовав получить к нему доступ через браузер.
Продвинутая обработка ошибок PHP с помощью .htaccess
Давайте теперь глубже окунёмся в эту тему, добавим дополнительной функциональности и исследуем различные реализации. В первую очередь мы исследуем работу с ошибками PHP для рабочего окружения (например, для веб-сайтов и приложений, которые находятся онлайн, активны и являются публичными), затем мы рассмотрим работу с ошибками для окружения разработчика (например, для проектов под разработкой, тестирования, частных, т. д.).
Контролирование уровня сообщения ошибок PHP
Используя .htaccess возможно настроить уровень сообщения ошибок, который подходит под ваши практические нужды. Общий форт для контролирования уровня ошибок PHP следующий:
# общий вид директивы для настройки уровня ошибок php php_value error_reporting цифра
Есть несколько распространённых значений, которые можно подставить вместо «цифра», в том числе:
- Самое полное сообщение об ошибках (соответствует E_ALL) — для этого используйте значение «32767».
- Полное сообщение об ошибках — для полной записи ошибок PHP используйте величину «8191», которая включит запись всего, кроме уведомлений времени выполнения об использовании устаревших конструкций (предупреждения о коде, который не будет работать в следующих версиях PHP).
- Сообщение об ошибках Zend — для записи как фатальных, так и не фатальных предупреждениях времени компиляции, генерируемых скриптовым движком Zend, используйте «192».
- Сообщение о базовых ошибках — записывать уведомления времени выполнения. Указывают на то, что во время выполнения скрипта произошло что-то, что может указывать на ошибку, хотя это может происходить и при обычном выполнении программы. Для этого используйте цифру «8».
- Минимальное сообщение об ошибках — записывать только фатальные ошибки времени выполнения. Это неустранимые средствами самого скрипта ошибки, такие как ошибка распределения памяти и т.п. Выполнение скрипта в таком случае прекращается. Для этого используйте цифру «1».
Конечно можно использовать и другие значения («цифры») для тонкой настройки того, какие именно ошибки вы хотите фиксировать. Некоторые разъяснения по данному вопросу в самом низу.
Настраиваем максимальный размер файла для записей ваших ошибок
Используя .htaccess вы можете определить максимальный размер для ваших ошибок PHP. Имеется ввиду контроль размера каждой записанной ошибки, а не всего файла в целом. Синтаксис имеет следующий вид:
# генеральная директива для настройки максимального размера ошибки log_errors_max_len целове_число
Здесь «целове_число» представляет максимальный размер каждой записанной строки ошибки в байтах. По умолчанию значение равно «1024» (т. е. 1 килобайт). Чтобы удалить этот лимит можно установить значение «0». Помните, .что это значение также применяется для отображаемых ошибок, когда они включены (например, во время разработки).
Отключение записи повторяющихся ошибок
Если вы уже успели поработать с журналом ошибок, вы могли обратить внимание, что в нём множество похожих записей, которые различаются только временем события. От этой избыточности можно избавиться, просто добавьте в файл htaccess эти строки:
# отключаем запись повторяющихся ошибок php_flag ignore_repeated_errors on php_flag ignore_repeated_source on
При таких настройках повторяющиеся ошибки не будут записываться в ружнал, даже если они случились в различных источниках или адресах. Если вы хотите отключить повторяющиеся ошибки только из одного источника или файла, просто закомментируйте или удалите последнюю строку. И наоборот, чтобы убедиться, что ваш файл журнала событий включает все повторяющиеся ошибки, измените обе величины с on на off.
Собираем всё вместе — рабочее окружение
Обсудив особенности настройки записи ошибок PHP, давайте соберём все наши записи в один файл .htaccess. Данные настройки оптимизированы для рабочего окружения.
# обработка ошибок PHP для рабочего сервера
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Если вы считаете хорошим стилем код с пояснениями, то этот же код, но с комментариями:
# обработка ошибок PHP для рабочего сервера
# отключение отображения ошибок запуска
php_flag display_startup_errors off
# отключить отображение всех других ошибок
php_flag display_errors off
# отключить ошибки html разметки
php_flag html_errors off
# включить запись ошибок
php_flag log_errors on
# включить игнорирование повторяющихся ошибок
php_flag ignore_repeated_errors off
# отключить игнорирование ошибок из уникальных источников
php_flag ignore_repeated_source off
# включить запись утечек памяти php
php_flag report_memleaks on
# сохранять большинство последних ошибок через php_errormsg
php_flag track_errors on
# отключить форматирование справочных ссылок на ошибки
php_value docref_root 0
# отключить форматирование справочных ссылок на ошибки
php_value docref_ext 0
# указание пути до файла лога ошибок php
php_value error_log /home/path/public_html/domain/PHP_errors.log
# указать запись всех ошибок php
php_value error_reporting -1
# отключить максимальную длину строки ошибки
php_value log_errors_max_len 0
# защитить файл журнала ошибок от публичного доступа
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Приведённая стратегия идеальна для публичного сервера в рабочем окружении. Все ошибки скрыты от посторонних глаз, при этом они аккуратно собираются для администраторов и программистов. Конечно, вы можете настроить приведённые директивы под себя, чтобы они идеально подходили под ваши задачи. А теперь давайте рассмотрим стратегию работы с ошибками для окружения разработки.
Собираем всё вместе — окружение разработки
Разрабатывая или отлаживая программу, удобнее отслеживать возникающие PHP ошибки в режиме реального времени, прямо в браузере. Пример .htaccess с соответствующими настройками под окружение разработки приведён ниже:
# работа с ошибками PHP для серверов разработчиков
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Не будем объяснять каждую строку — вы можете посмотреть соответствующие разъяснения чуть повыше.
Подсказки
Чтобы узнать абсолютный путь до лог файла на сервере методами PHP (для директивы php_value error_log)
echo dirname(__FILE__);
Пример .htaccess для сервера на Widnows, установленного по этой инструкции.
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log C:ServerdatahtdocsPHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>
Не работает
Этот способ не применим на хостингах, где PHP работает как CGI (возможные пути решения будут показаны в следующей статье).
-1 и ~0 для отображения всех ошибок PHP
В директиве php_value error_reporting для отображения всех ошибок можно указать -1 или ~0. Т.е. строки выглядят так:
php_value error_reporting -1 php_value error_reporting ~0
Причём более правильным считается именно второй способ, т. е. с использованием ~0.
Предопределенные константы и побитовые операции error_reporting
Для ознакомления рекомендуются следующие страницы справки PHP
- Предопределенные константы
- Побитовые операторы
Например, если мы хотим записывать ТОЛЬКО следующие ошибки E_ERROR (значение 1), E_WARNING (значение 2), E_CORE_ERROR (значение 16), то для получения соответствующейо числовой величины следовало бы перевести эти величины в двоичные числа и произвести соответствующие побитовые операции, а потом полученное двоичное число перевести в десятеричное. Тем не менее, эту операцию можно упростить — достаточно сложить значения десятеричных чисел. Т.е. в нашем случае это 1+2+16=19
php_value error_reporting 19
будет отображать ошибки E_ERROR, E_WARNING и E_CORE_ERROR.
Пример абсолютного пути до лог файла на хостинге Hostland (для директивы php_value error_log)
/home/host900456/codeby.net/blogs/htdocs/www/PHP_errors.log
Вместо host900456 нужно указать ваш аккаунт.
Вместо codeby.net нужно указать ваш домен.
Кстати, хороший хостинг, на котором работает этот самый сайт. Рекомендуем!
- Способы включения и отключения вывода ошибок PHP
- Через .htaccess
- Через логи PHP
- Через файл php.ini
Как правило, хостинг-провайдеры отключают или блокируют показ ошибок PHP. Подобные ограничения вводятся потому что информацией об ошибках могут воспользоваться злоумышленники. Поэтому на рабочих серверах нежелательно включать вывод ошибок на экран.
При разработке сайтов и скриптов крайне важно отслеживать возникающие проблемы. Также эта информация нужна и системным администраторам, чтобы своевременно предотвращать сбои в работе сайта и сервера.
Лучшим вариантом будет отключить вывод ошибок на экран и настроить отображение ошибок в логах. Так вы сможете отслеживать возникающие проблемы, не подвергая сервер угрозе.
В статье мы расскажем, как отключить или включить отображение ошибок PHP при помощи .htaccess, через скрипт PHP и с помощью файла php ini.
Обратите внимание: в некоторых случаях изменить настройки вывода можно только через обращение в техническую поддержку.
Способы включения и отключения вывода ошибок PHP
Через .htaccess
Перейдите в корневую папку сайта. Путь к корневой папке можно посмотреть в разделе «Хостинг» > «Сайты» в колонке «Папка»:

Открыть папку можно в разделе «Хостинг» > «Файловый менеджер». Другой способ перейти к папке: в разделе «Хостинг» > «Сайты» в колонке «Операции» нажмите Открыть папку.
В корневой папке откройте файл .htaccess. Если файла не существует, создайте его.
Чтобы вывести ошибки, добавьте в файл следующие строки:
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
Чтобы отключить ошибки PHP, добавьте в файл строки:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
Так же отключить отображение PHP error можно используя строки:
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
Через логи PHP
Проверить или скрыть ошибки в определенных файлах можно при помощи вызова PHP-функций.
Способ 1. Для вывода ошибок используйте функцию error_reporting. Пропишите необходимое вам значение в зависимости от того, какие ошибки вы хотите увидеть.
- Функция для вывода всех ошибок:
error_reporting(E_ALL)
- Функция для вывода всех ошибок, за исключением типа Notice:
error_reporting(E_ALL & ~E_NOTICE)
- Отключение вывода:
error_reporting(0)
- Отключение логирования повторяющихся ошибок:
# disable repeated error logging
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on
Способ 2. Этот метод подойдет для проверки конкретной части кода. Пропишите необходимое вам значение в зависимости от того, какие типы ошибок вы хотите увидеть.
Команда для вывода всех ошибок выглядит следующим образом:
ini_set(‘display_errors’, ‘On’)
error_reporting(E_ALL)
После этого добавьте:
ini_set(‘display_errors’, ‘Off’)
Способ 3. Другой вариант включения вывода ошибок через скрипт:
php_flag display_startup_errors on
php_flag display_errors on
Для отключения добавьте строки:
php_flag display_startup_errors off
php_flag display_errors off
Способ 4. Для подключения вывода с логированием через конфигурацию веб-сервера введите:
- для Apache:
ErrorLog «/var/log/apache2/my-website-error.log»,
- для Nginx:
error_log /var/log/nginx/my-website-error.log.
Подробнее о других аргументах вы можете прочитать в документации PHP на официальном сайте php.net.
Через файл php.ini
Включить отслеживание ошибок можно с помощью файла php.ini. Такой способ подойдет тем, кто хочет отобразить или скрыть ошибки для всего сайта или кода.
Важно! Настройка отслеживания ошибок через файл php.ini есть не у всех, так как некоторые хостинг-провайдеры частично или полностью закрывают доступ к файлу.
Способ 1. Показать все ошибки можно добавив в php.ini строку:
display_errors = on
После этого перезагрузите сервер:
sudo apachectl -k graceful
Способ 2. Включить вывод ошибок можно при помощи error_reporting. После знака «=» пропишите необходимое вам значение в зависимости от того, какие типы ошибок вы хотите увидеть.
Чтобы вывести все ошибки, добавьте следующие строки:
error_reporting = E_ALL
display_errors On
После перезагрузите веб-сервер:
sudo apachectl -k graceful
Чтобы скрыть отображение ошибок, добавьте строки:
error_reporting = E_ALL
display_errors Off
Теперь вы знаете, как можно включить и отключить вывод ошибок PHP.
Небольшая заметка-подсказка для тех кому необходимо включить или отключить вывод ошибок на своем хостинге.
Когда речь идет о процессе разработки скриптов или сайтов необходимо быть в курсе ошибок и предупреждений, которые случаются в процессе их выполнения. К сожалению некоторые хостинг провайдеры блокируют вывод ошибок и предупреждений на столько сильно, что их вывод невозможно включить без обращения в техническую поддержку. Однако такие хостинги встречаются не часто и как правило включить или выключить вывод ошибок можно одним из следующих способов:
Способ 1: Использование файла .htaccess
Для этого откройте файл .htaccess который располагается в корне Вашего сайта (если его нет, то создайте его). И добавьте в него следующие строчки:
php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on
Если Вам нужно отключить вывод ошибок — замените слово on на off.
Способ 2: С помощью PHP кода
Вы можете включать или отключать вывод ошибок в определенных файлах с помощью вызова PHP функций.
error_reporting(E_ALL); //вывод всех ошибок error_reporting(0); //отключение ошибок error_reporting(E_ALL & ~E_NOTICE); //вывод ошибок, но не предупреждений типа Notice
Все возможные аргументы Вы можете найти в документации на сайта php.net. Иногда так же может быть полезна команда ini_set:
ini_set('display_errors', 1); //включение ошибок
Однако данная команда обычно заблокирована.
Способ 3: Правка файла php.ini
Иногда хостинг провайдер открывает Вам доступ к файлу конфигурации PHP — php.ini. Доступ может быть открыт полностью, либо частично. Если Вы счастливый обладатель такого хостинга, то включить вывод ошибок можно изменив настройку display_errors.
display_errors = on
После чего необходимо перезагрузить apache.
Примечание: Иногда редактирование файла php.ini вынесено в панель администрирования хостинга. Если Вам не помог ни один описанный способ, зайдите в панель управления хостингом и постарайтесь найти вкладку «настройки php», если данная вкладка присутствует, то скорее всего внутри нее будет опция, позволяющая включать или отключать вывод ошибок.
Запись опубликована в рубрике PHP с метками .htaccess, display error, hide error, PHP, php.ini, Settings, show error, вывести, ошибки, показать, предупреждения, спрятать. Добавьте в закладки постоянную ссылку.

От автора: за свои ошибки нужно отвечать! Их нужно исправлять! Но ведь можно исправить как-нибудь потом, когда будет время? В настоящей жизни такое не всегда возможно, а на своем сайте для этого нужно лишь в PHP отключить ошибки.
Зачем прятать свои программные «недостатки»?
Тут, однако, «попахивает» философией, господа разработчики! А программирование и философия – это далеко идущие друг от друга дисциплины. Понятно, что если скрыть свои баги в коде, тогда будет не так стыдно. И никто не узнает, что вы только начинающий программист :).
В программировании желание убрать ошибки PHP не всегда говорит о непорядочности веб-разработчика. А скорее наоборот: таким образом он пытается обезопасить систему работающего ресурса от взлома и «не напрягать» пользователей отображением сообщений о существующих «недугах» в коде сайта.
Вывод ошибок приветствуется и востребован только на этапе «зарождения» нового ресурса. При его создании каждый из модулей движка должен пройти скрупулезную стадию тестирования. И все для того, чтобы затем корректно работать в составе всей системы.
С помощью сообщений, выдаваемых ядром языка, разработчик узнает о существующей проблеме. Дополнительно каждое уведомление об ошибке сопровождается коротким пояснением характера ее происхождения. Что позволяет разработчику как можно быстрее исправить допущенный «прокол».

Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!
Отображение системных сообщений не только портит впечатление пользователей о ресурсе, но и делает его крайне уязвимым. Вот почему так важно отключать показ ошибок в PHP на работающем сайте.
Пример уязвимости
На следующем примере я попытаюсь доказать вам, что афишировать свои программные ошибки не всегда безопасно. Предположим, что сайт работает на каком-то движке, написанном с помощью MySQL и PHP. В одном из скриптов невыспавшийся кодер неправильно прописал пароль в строке подключения.

После запуска скрипта на сайте все пользователи увидят на экране описание данной ошибки. А хакер – получит логин пользователя без всякого взлома, «шума и пыли». Гляньте на следующий скриншот:

Закрываем дыру
В коде такую серьезную прореху можно «закрыть» с помощью «собаки». Точнее, символа «@». Пример:
|
@$load= mysqli_connect(‘localhost’, ‘root’, ‘321’, ‘site’); |
Или с помощью функции error_reporting(), передав ей в качестве значения 0.

В первом варианте (с «собачкой») мы отключаем отображение ошибки, допущенной в одной строке. Во втором – запрещаем вывод уведомлений для всего кода скрипта.
Через файлы конфигурации
Кроме этого отключить ошибки PHP можно в htaccess. Данный файл содержит в себе настройки веб-сервера Apache. Чтобы системные сообщения о «багах» не появлялись на страницах ресурса, в данный фал следует добавить следующие строчки:
|
php_flag display_errors on php_value error_reporting 0 |
Получается, что таким образом мы воздействуем не на отдельно взятый скрипт, а на весь код движка в целом. Но это не единственный способ глобального воздействия. Если вы используете Денвер, тогда в нем язык программирования работает в режиме шлюза (CGI). В таком случае нужно отключать ошибки в PHP ini. Найдите в данном файле следующую строку и измените значение директивы на off.
Ну, вроде разобрались, как и когда в PHP нужно «отключать» свою совесть и запрещать отображение сообщений об ошибках. Причем в некоторых случаях это не только можно делать, но и нужно.

Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать веб-приложение на PHP с полного нуля
Получить курс сейчас!

Разработка веб-приложения на PHP
Скачайте видеокурс и узнайте, как создать веб-приложение на PHP
Скачать
Поведение этих функций зависит от установок в php.ini.
| Имя | По умолчанию | Меняемо | Список изменений |
|---|---|---|---|
| error_reporting | NULL | PHP_INI_ALL | |
| display_errors | «1» | PHP_INI_ALL | |
| display_startup_errors | «0» | PHP_INI_ALL | |
| log_errors | «0» | PHP_INI_ALL | |
| log_errors_max_len | «1024» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
| ignore_repeated_errors | «0» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
| ignore_repeated_source | «0» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
| report_memleaks | «1» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
| track_errors | «0» | PHP_INI_ALL | |
| html_errors | «1» | PHP_INI_ALL | PHP_INI_SYSTEM в PHP <= 4.2.3. |
| xmlrpc_errors | «0» | PHP_INI_SYSTEM | Доступно, начиная с PHP 4.1.0. |
| xmlrpc_error_number | «0» | PHP_INI_ALL | Доступно, начиная с PHP 4.1.0. |
| docref_root | «» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.0. |
| docref_ext | «» | PHP_INI_ALL | Доступно, начиная с PHP 4.3.2. |
| error_prepend_string | NULL | PHP_INI_ALL | |
| error_append_string | NULL | PHP_INI_ALL | |
| error_log | NULL | PHP_INI_ALL |
Для подробного описания констант
PHP_INI_*, обратитесь к разделу Где могут быть установлены параметры конфигурации.
Краткое разъяснение конфигурационных
директив.
-
error_reporting
integer -
Задает уровень протоколирования ошибки. Параметр может быть либо числом,
представляющим битовое поле, либо именованной константой.
Соответствующие уровни и константы приведены в разделе
Предопределенные константы,
а также в php.ini. Для установки настройки во время выполнения
используйте функцию error_reporting(). См. также
описание директивы
display_errors.В PHP 5.3 и новее later, значение по умолчанию равно
E_ALL&
~E_NOTICE&
~E_STRICT&
~E_DEPRECATED. При этой настройке на отображаются уровни ошибок
E_NOTICE,E_STRICT
иE_DEPRECATED. Можно отображать их при разработке.
До версии PHP 5.3.0, значением по умолчанию было
E_ALL&
~E_NOTICE&
~E_STRICT.
В PHP 4 значением по умолчанию былоE_ALL
& ~E_NOTICE.Замечание:
Включение
E_NOTICEво время разработки имеет ряд
преимуществ. Для отладки: NOTICE сообщения могут предупреждать о
возможных ошибках в коде. Например, использование
непроинициализированных переменных вызовет подобное сообщение. Это
очень полезно при поиске опечаток и экономит время при отладке.
NOTICE сообщения также предупреждают о плохом стиле. Например,
$arr[item] лучше писать так:
$arr[‘item’] с тех пор, как PHP начал интерпретировать
«item» как константу. Если это не константа, PHP
принимает это выражение за строковый индекс элемента массива.Замечание:
В PHP 5 доступен новый уровень ошибок
E_STRICT.
Так какE_STRICTне входит в состав
E_ALL, необходимо явно включать этот уровень
ошибок. ВключениеE_STRICTво время разработки
также имеет свои преимущества. STRICT сообщения предлагают подсказки, которые могут помочь
обеспечить лучшую функциональную и обратную совместимость вашего кода.
Эти сообщения могут включать в себя такие вещи, как вызов нестатических методов
статически, определение свойств в совместимого класса, в то время как
они уже определены в используемом трейте, и до PHP 5.3 некоторые устаревшие возможности также
будут выдавать ошибки уровняE_STRICT, такие как присвоение
объектов по ссылке при создании экземпляра.Замечание:
PHP константы за пределами PHPИспользование PHP констант за пределами PHP, например в файле
httpd.conf, не имеет смысла, так как в таких
случаях требуются целочисленные значения (integer). Более
того, с течением времени будут добавляться новые уровни ошибок, а
максимальное значение константыE_ALLсоответственно
будет расти. Поэтому в месте, где предполагается указать
E_ALL, лучше задать большое целое число, чтобы
перекрыть все возможные битовые поля. Таким числом может быть, например,
2147483647 (оно включит все возможные ошибки, не
толькоE_ALL). -
display_errors
string -
Эта настройка определяет, требуется ли выводить ошибки на экран вместе
с остальным выводом, либо ошибки должны быть скрыты от пользователя.Значение «stderr» посылает ошибки в поток
stderr вместо stdout. Значение
доступно в версии PHP 5.2.4. В ранних версиях эта директива имела тип
boolean.Замечание:
Этот функционал предназначен только для разработки и не должен
использоваться в готовых производственных системах (например,
системах, имеющих доступ в интернет).Замечание:
Несмотря на то, что display_errors может быть установлена во время
выполнения (функцией ini_set()), это ни на что
не повлияет, если в скрипте есть фатальные ошибки. Это обусловлено
тем, что ожидаемые действия программы во время выполнения не получат
управления (не будут выполняться). -
display_startup_errors
boolean -
Даже если display_errors включена, ошибки, возникающие во время запуска
PHP, не будут отображаться. Настойчиво рекомендуем включать
директиву display_startup_errors только для отладки. -
log_errors
boolean -
Отвечает за выбор журнала, в котором будут сохраняться сообщения об
ошибках. Это может быть журнал сервера или
error_log. Применимость этой
настройки зависит от конкретного сервера.Замечание:
Настоятельно рекомендуем при работе на готовых работающих
web сайтах протоколировать ошибки там, где они отображаются. -
log_errors_max_len
integer -
Задание максимальной длины log_errors в байтах. В
error_log добавляется информация
об источнике. Значение по умолчанию 1024. Установка значения в 0
позволяет снять ограничение на длину log_errors. Это ограничение
распространяется на записываемые в журнал ошибки, на отображаемые ошибки,
а также на $php_errormsg.Если используется integer,
значение измеряется байтами. Вы также можете использовать сокращенную запись,
которая описана в этом разделе FAQ. -
ignore_repeated_errors
boolean -
Не заносить в журнал повторяющиеся ошибки. Ошибка признается
повторяющейся, если происходит в том же файле и в той же строке, и если
настройка
ignore_repeated_source
выключена. -
ignore_repeated_source
boolean -
Игнорировать источник ошибок при пропуске повторяющихся сообщений. Когда
эта настройка включена, повторяющиеся сообщения об ошибках не будут
заноситься в журнал вне зависимости от того, в каких файлах и строках
они происходят. -
report_memleaks
boolean -
Если настройка включена (по умолчанию), будет формироваться отчет об
утечках памяти, зафиксированных менеджером памяти Zend. На POSIX
платформах этот отчет будет направляться в поток stderr. На Windows
платформах он будет посылаться в отладчик функцией OutputDebugString(),
просмотреть отчет в этом случае можно с помощью утилит, вроде
» DbgView. Эта настройка имеет
смысл в сборках, предназначенных для отладки. При этом
E_WARNINGдолжна быть включена в список
error_reporting. -
track_errors
boolean -
Если включена, последняя произошедшая ошибка будет первой в переменной
$php_errormsg. -
html_errors
boolean -
Отключает HTML тэги в сообщениях об ошибках. Новый формат HTML сообщений
об ошибках предоставляет возможность вставлять ссылки в сообщения и
перенаправлять пользователя на страницы с описаниями ошибок. За такие
ссылки ответственны
docref_root и
docref_ext. -
xmlrpc_errors
boolean -
Переключает форматирование сообщений об ошибках на формат XML-RPC
сообщений. -
xmlrpc_error_number
integer -
Используется в качестве значения XML-RPC элемента faultCode.
-
docref_root
string -
Новый формат ошибок содержит ссылку на страницу с описанием ошибки или
функции, вызвавшей эту ошибку. Можно разместить копию
описаний ошибок и функций локально и задать ini директиве значение
URL этой копии. Если, например, локальная копия описаний доступна по
адресу «/manual/», достаточно прописать
docref_root=/manual/. Дополнительно, необходимо
задать значение директиве docref_ext, отвечающей за соответствие
расширений файлов файлам описаний вашей локальной копии,
docref_ext=.html. Также возможно использование
внешних ссылок. Например,
docref_root=http://manual/en/или
docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon
&url=http%3A%2F%2Fwww.php.net%2F"В большинстве случаев вам потребуется, чтобы значение docref_root оканчивалось
слешем «/». Тем не менее, бывают случаи, когда
это не требуется (см. выше, второй пример).Замечание:
Этот функционал предназначен только для разработки, так как он облегчает
поиск описаний функций и ошибок. Не используйте его в готовых
производственных системах (например, имеющих доступ в интернет). -
docref_ext
string -
См. docref_root.
Замечание:
Значение docref_ext должно начинаться с точки «.».
-
error_prepend_string
string -
Строка, которая будет выводиться непосредственно перед сообщением об
ошибке. -
error_append_string
string -
Строка, которая будет выводиться после сообщения об ошибке.
-
error_log
string -
Имя файла, в который будут добавляться сообщения об ошибках. Файл
должен быть открыт для записи пользователем web сервера. Если
используется специальное значение syslog, то
сообщения будут посылаться в системный журнал. На Unix системах это
syslog(3), на Windows NT — журнал событий. Системный журнал не
поддерживается в Windows 95. См. также: syslog().
Если директива не задана, ошибки будут направляться в SAPI журналы.
Например, это могут быть журналы ошибок Apache или поток
stderr командной строки CLI.
Смотрите также функцию error_log().
Вернуться к: Установка и настройка