Disable display error php

Поведение этих функций зависит от установок в php.ini.

Настройка во время выполнения

Поведение этих функций зависит от установок в 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.


I am trying to turn off all errors on my website. I have followed different tutorials on how to do this, but I keep getting read and open error messages. Is there something I am missing?

I have tried the following in my php.ini file:

;Error display
display_startup_errors = Off
display_errors = Off
html_errors = Off
docref_root = 0
docref_ext = 0

For some reason when I do a fileopen() call for a file which does not exist, I still get the error displayed. This is not safe for a live website, for obvious reasons.

Peter Mortensen's user avatar

asked Apr 11, 2013 at 12:52

Jms Bnd's user avatar

3

I always use something like this in a configuration file:

// Toggle this to change the setting
define('DEBUG', true);

// You want all errors to be triggered
error_reporting(E_ALL);

if(DEBUG == true)
{
    // You're developing, so you want all errors to be shown
    display_errors(true);

    // Logging is usually overkill during development
    log_errors(false);
}
else
{
    // You don't want to display errors on a production environment
    display_errors(false);

    // You definitely want to log any occurring
    log_errors(true);
}

This allows easy toggling between debug settings. You can improve this further by checking on which server the code is running (development, test, acceptance, and production) and change your settings accordingly.

Note that no errors will be logged if error_reporting is set to 0, as cleverly remarked by Korri.

Peter Mortensen's user avatar

answered Apr 11, 2013 at 12:59

Sherlock's user avatar

SherlockSherlock

7,4776 gold badges36 silver badges79 bronze badges

4

You should consider not displaying your error messages instead!

Set ini_set('display_errors', 'Off'); in your PHP code (or directly into your ini file if possible), and leave error_reporting on E_ALL or whatever kind of messages you would like to find in your logs.

This way you can handle errors later, while your users still don’t see them.

Full example:

define('DEBUG', true);
error_reporting(E_ALL);

if (DEBUG)
{
    ini_set('display_errors', 'On');
}
else
{
    ini_set('display_errors', 'Off');
}

Or simply (same effect):

define('DEBUG', true);

error_reporting(E_ALL);
ini_set('display_errors', DEBUG ? 'On' : 'Off');

Peter Mortensen's user avatar

answered Feb 11, 2014 at 10:52

Levite's user avatar

LeviteLevite

16.9k8 gold badges50 silver badges50 bronze badges

2

In php.ini, comment out:

error_reporting = E_ALL & ~E_NOTICE
error_reporting = E_ALL & ~E_NOTICE | E_STRICT
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ER… _ERROR
error_reporting = E_ALL & ~E_NOTICE

By placing a ; ahead of it (i.e., like ;error_reporting = E_ALL & ~E_NOTICE)

For disabling in a single file, place error_reporting(0); after opening a php tag.

Peter Mortensen's user avatar

answered Apr 11, 2013 at 13:01

Vishnu R's user avatar

Vishnu RVishnu R

1,8593 gold badges26 silver badges45 bronze badges

1

In file php.ini you should try this for all errors:

error_reporting = off

Urs's user avatar

Urs

4,8947 gold badges51 silver badges115 bronze badges

answered Apr 1, 2014 at 15:45

Shahzeb chohan's user avatar

1

Let me quickly summarize this for reference:

  • error_reporting() adapts the currently active setting for the default error handler.

  • Editing the error reporting ini options also changes the defaults.

    • Here it’s imperative to edit the correct php.ini version — it’s typically /etc/php5/fpm/php.ini on modern servers, /etc/php5/mod_php/php.ini alternatively; while the CLI version has a distinct one.

    • Alternatively you can use depending on SAPI:

      • mod_php: .htaccess with php_flag options
      • FastCGI: commonly a local php.ini
      • And with PHP above 5.3 also a .user.ini
    • Restarting the webserver as usual.

If your code is unwieldy and somehow resets these options elsewhere at runtime, then an alternative and quick way is to define a custom error handler that just slurps all notices/warnings/errors up:

set_error_handler(function(){});

Again, this is not advisable, just an alternative.

answered Jul 30, 2014 at 1:16

mario's user avatar

mariomario

143k20 gold badges236 silver badges288 bronze badges

2

In file php.ini you should try this for all errors:

display_errors = On

Location file is:

  • Ubuntu 16.04:/etc/php/7.0/apache2
  • CentOS 7:/etc/php.ini

answered Mar 10, 2015 at 4:26

1

You can also use PHP’s error_reporting();

// Disable it all for current call
error_reporting(0);

If you want to ignore errors from one function only, you can prepend a @ symbol.

@any_function(); // Errors are ignored

Peter Mortensen's user avatar

answered Apr 11, 2013 at 12:54

Tim S.'s user avatar

Tim S.Tim S.

13.4k7 gold badges43 silver badges72 bronze badges

1

I usually use PHP’s built in error handlers that can handle every possible error outside of syntax and still render a nice ‘Down for maintenance’ page otherwise:

Format PHP error on production server

Peter Mortensen's user avatar

answered Mar 10, 2015 at 4:33

Vladimir Ramik's user avatar

Vladimir RamikVladimir Ramik

1,9202 gold badges12 silver badges23 bronze badges

Open your php.ini file (If you are using Linux — sudo vim /etc/php5/apache2/php.ini)

Add this lines into that file

   error_reporting = E_ALL & ~E_WARNING 

(If you need to disabled any other errors -> error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE & ~E_WARNING)

    display_errors = On

And finally you need to restart your APACHE server.

answered Jan 5, 2016 at 9:26

UWU_SANDUN's user avatar

UWU_SANDUNUWU_SANDUN

1,10513 silver badges19 bronze badges

It is not enough in case of PHP fpm. It was one more configuration file which can enable display_error. You should find www.conf. In my case it is in directory /etc/php/7.1/fpm/pool.d/

You should find php_flag[display_errors] = on and disable it, php_flag[display_errors] = off. This should solve the issue.

Peter Mortensen's user avatar

answered Jan 25, 2019 at 16:55

Vazgen Manukyan's user avatar

Vazgen ManukyanVazgen Manukyan

1,3801 gold badge11 silver badges17 bronze badges

It’s been quite some time and iam sure OP’s answer is cleared. If any new user still looking for answer and scrolled this far, then here it is.

Check your updated information in php.ini file

Using Windows explorer:

C/xampp/php/php.ini

Using XAMPP Control Panel

  1. Click the Config button for ‘Apache’ (Stop | Admin | Config | Logs)
  2. Select PHP (php.ini)

Can i create my own phpinfo()? Yes you can

  1. Create a phpinfo.php in your root directly or anywhere you want
  2. Place this <?php phpinfo(); ?>
  3. Save the file.
  4. Open the file and you should see all the details.

How to set display_errors to Off in my own file without using php.ini

You can do this using ini_set() function. Read more about ini_set() here (https://www.php.net/manual/en/function.ini-set.php)

  1. Go to your header.php or index.php
  2. add this code ini_set('display_errors', FALSE);

To check the output without accessing php.ini file

$displayErrors = (ini_get('display_errors') == 1) ? 'On' : 'Off';
$PHPCore = array(
    'Display error' => $displayErrors
    // add other details for more output
);
foreach ($PHPCore as $key => $value) {
    echo "$key: $value";
}

answered Jul 30, 2020 at 23:50

Dexter's user avatar

DexterDexter

7,2553 gold badges37 silver badges36 bronze badges

Хостинг-провайдеры нередко отключают или блокируют вывод всех ошибок и предупреждений. Такие ограничения вводятся не просто так. Дело в том, что на рабочих серверах крайне не рекомендуется держать ошибки в открытом доступе. Информация о неисправностях может стать «наживкой» для злоумышленников.

При этом в процессе разработки сайтов и скриптов, очень важно отслеживать возникающие предупреждения. Знать о сбоях и неисправностях также важно и системным администраторам — это позволяет предотвратить проблемы на сайте или сервере.

Самый оптимальный вариант — не просто скрыть показ ошибок, но и настроить запись о них в логах. Это позволит отслеживать предупреждения и не подвергать сервер угрозе.

В статье мы расскажем, как включить и отключить через .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 отображение ошибок.

аватар | 20 июня 2013 18:26

Часто слышал о такой проблеме от других пользователей. Одним из-за хостера нужно скрыть появляющиеся ошибки, другим наоборот — понять, что происходит с их кодом, потому что ни одна ошибка не показывается. В этой статье постараюсь показать все основные способы отобразить / скрыть ошибки.

В скрипте PHP

1) В PHP есть всего лишь один оператор, который поддерживает систему управления ошибками — это знак @. Он позволяет проигнорировать сообщение любое сообщение об ошибке. Его нужно ставить ПЕРЕД выражением, которое может её содержать.

В примере специально допущена ошибка, но она НЕ будет отображена

$value = @$var[$key];

2) Также можно перед проверяемым скриптом PHP можно вставить настройку параметра отображения ошибок (display_errors). Он может приобретать значение либо On (показывать), либо Off (скрыть).

ini_set('display_errors','On');
error_reporting('E_ALL');

И соответственно после кода, который проверялся на ошибки, выставить параметр обратно.

ini_set('display_errors','Off');

Например, Вы хотите увидеть ошибки в скрипте

ini_set('display_errors', 'On'); // сообщения с ошибками будут показываться
error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки
$value = $var[$key]; // пример ошибки
ini_set('display_errors', 'Off'); // теперь сообщений НЕ будет

Можно выставить наоборот (в верхнем off, а в нижнем on), чтобы в конкретном отрезке кода ошибки НЕ отображались.

В файле .htaccess

Чаще всего проблему решают именно указанием настроек в файле .htaccess, который располагается в корневой директории сайта. В строке php_flag display_errors нужно также выставить On или Off

php_flag display_errors On
#показать все ошибки кроме предупреждений (Notice)
php_value error_reporting "E_ALL & ~E_NOTICE"
Если Вам нужно работать с конкретным типом ошибок, то привожу основные их виды:

E_ALL — все ошибки
E_ERROR — ошибки функций (критические)
E_WARNING — предупреждения
E_PARSE — ошибки синтаксиса
E_NOTICE — замечания (ненормальный код — кодировка и тп)
E_CORE_ERROR — ошибка обработчика
E_CORE_WARNING — предупреждения обработчика
E_COMPILE_ERROR — ошибка компилятора
E_COMPILE_WARNING — предупреждение компилятора
E_USER_ERROR — ошибка пользователей
E_USER_WARNING — предупреждение пользователей
E_USER_NOTICE — уведомления пользователей

В файле php.ini

Как видите, параметр можно указать в нескольких местах. Однако, если у Вы хотите, чтобы целиком на сайте этот параметр имел определённое значение, то проще выставить его в файле php.ini.(к нему на хостинге не всегда может быть доступ), но в этом случае можно будет даже обойти настройки всего хостинга

В php.ini:

error_reporting = E_ALL
display_errors On

В верхней строке выбираем все виды ошибок, в нижней даём добро на их отображение.

После правок необходимо перезапустить Apache, чтобы настройки были изменены и вступили в силу (graceful или restart):

sudo apachectl -k graceful

В каком порядке обрабатывается параметр ошибок

В самом начале учитывается параметр php.ini , затем .htaccess , а после то, что указано непосредственно в скрипте PHP. Так что если что-то не сработало, то смотрим по цепочку выше, возможно, там настройка другая.

Как обычно спасибо за внимание и удачи! Надеюсь статья была полезна!

Предыдущая статья
Пример настройки файла htaccess php Следующая статья
Как подсчитать количество строк в файле PHP?

Похожие статьи

Комментарии к статье (vk.com)

Содержание:

  • Способы вывода ошибок PHP
  • Виды ошибок в файле .htaccess
  • Как включить вывод ошибок через .htaccess
  • Примеры практического применения
  • Включение журналирования ошибок PHP в .htaccess
  • Дополнительные способы вывода ошибок PHP

Ошибки в коде — неотъемлемая часть любого процесса разработки. Чтобы понять, почему не выполняется скрипт, необходимо вывести error-логи PHP на экран.

Следует помнить, что в публичной версии сайта вывод ошибок на экран должен быть отключён.

  • Через файл .htaccess, отвечающий за дополнительные параметры сервера Apache.
  • Непосредственно через PHP-скрипт.
  • Через файл php.ini, содержащий настройки интерпретатора PHP.

Преимущества вывода ошибок в файле .htaccess

  1. Широкий охват. Параметры распространяются на все элементы дочерних поддиректорий.
  2. Быстрота и удобство. Обработка ошибок настраивается в несколько команд и в одном месте.

Вывод ошибок на экран лучше делать через файл .htaccess, особенно когда PHP-файлов несколько. Поэтому далее разберём этот способ подробнее.

Виды ошибок PHP в файле .htaccess

  • E_ALL — все виды ошибок, кроме E_STRICT до PHP 5.4.0.
  • E_ERROR — фатальные ошибки, прекращающие работу скрипта.
  • E_WARNING — ошибки-предупреждения. Не являются фатальными, поэтому не вызывают прекращение работы скрипта.
  • E_PARSE — ошибки разбора. Могут возникать только во время компиляции.
  • E_NOTICE — уведомления о нарушении времени выполнения скрипта.
  • E_CORE_ERROR — фатальная ошибка обработчика. Генерируется ядром во время запуска PHP-скрипта.
  • E_CORE_WARNING — предупреждения компиляции, возникающие при запуске PHP-скрипта.
  • E_COMPILE_ERROR — фатальные ошибки, возникающие на этапе компиляции.
  • E_COMPILE_WARNING — предупреждение компилятора PHP-скриптов.
  • E_USER_ERROR — ошибки, сгенерированные пользователями.
  • E_USER_WARNING — предупреждения, сгенерированные пользователями.
  • E_USER_NOTICE — уведомления, сгенерированные пользователями.

Как включить вывод ошибок через .htaccess

Файл .htaccess должен находиться в корневой директории сайта (например, «public_html»). Отредактировать его можно с помощью проводника, доступного в панели хостинга.

Примечание. Если файла .htaccess нет, то его необходимо создать.

Включить отображение ошибок PHP и настроить фильтрацию их вывода можно двумя директивами: «display_errors» и «error_reporting». Первая отвечает за состояние режима показа ошибок («On» или «Off»), а вторая задаёт глубину отображения.

Показать ошибки PHP на экране можно с помощью следующего кода:

php_flag display_errors on
php_value error_reporting -1

После сохранения изменённого файла, следует обновить страницу.

Примеры практического применения

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

Следующий код скроет ошибки PHP с экрана:

# скрыть ошибки 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_flag  log_errors on
# месторасположение журнала ошибок PHP
php_value error_log /var/www/имя_пользователя/data/www/ваш_www-домен/

Чтобы обработка ошибок в .htaccess выполнялась безопасно надо обязательно защитить папку с log-файлами от внешнего доступа при помощи следующего кода:

# запретить доступ к журналу ошибок PHP
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>

Можно также настроить фильтрацию. Флаг «integer» указывает на глубину вывода данных (уровень показа). Значение «0» не выведет никаких ошибок. Комбинация «8191» запишет в log-файл сбои всех уровней.

# общая директива для фильтрации ошибок php
php_value error_reporting integer

Чтобы текст ошибок не обрезался, можно установить максимальный размер на строку:

# общая директива для установки максимального размера строки
log_errors_max_len integer

Выключение записи повторяющихся ошибок сократит объём поступающих данных и улучшит восприятие информации:

# отключить запись повторяющихся ошибок
php_flag ignore_repeated_errors on
php_flag ignore_repeated_source on

В результате настройки .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_reporting -1
php_value log_errors_max_len 0

<Files /home/path/public_html/domain/PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>

Во время разработки или отладки файл .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
# [see footnote 3] # php_value error_reporting 999999999
php_value error_reporting -1
php_value log_errors_max_len 0

<Files /home/path/public_html/domain/PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>

Включение журналирования ошибок PHP в .htaccess

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

# включение записи PHP ошибок
php_flag log_errors onphp_value error_log /home/path/public_html/domain/PHP_errors.log

Примечание. Вместо «/home/path/public_html/domain/PHP_errors.log» нужно подставить собственный путь до директории, в которой будет вестись журнал ошибок.

Чтобы запретить доступ к журналу извне, нужно добавить следующий код:

# предотвращаем доступ к логу PHP ошибок
<Files PHP_errors.log>
Order allow,deny
Deny from all
Satisfy All
</Files>

Дополнительные способы вывода ошибок PHP

Можно добавить оператор «@», чтобы запретить показ ошибок в конкретной инструкции PHP:

$value = @$var[$key];

Вывод ошибок в PHP-скрипте

Чтобы выводить все ошибки, нужно в начале скрипта прописать:

error_reporting(-1);

Если необходимо отображать ошибки PHP только из определённого места скрипта, то можно использовать следующий код:

ini_set('display_errors', 'On'); // сообщения с ошибками будут показываться
error_reporting(E_ALL); // E_ALL - отображаем ВСЕ ошибки
$value = $var[$key]; // пример ошибки
ini_set('display_errors', 'Off'); // теперь сообщений НЕ будет

Примечание. Если заменить значения «On» и «Off» в первой и последней строках на противоположные, то на конкретном участке кода ошибки выводиться не будут.

Через файл php.ini

Включить или выключить показ ошибок на всём сайте/хостинге также можно с помощью файла «php.ini», в котором нужно изменить два следующих параметра:

error_reporting = E_ALL
display_errors On

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

2018/07/09

Марат

1048

0

php |

Сегодня рассмотрим тему, как показать ошибку на сайте через PHP, либо наоборот скрыть ошибку и зачем вообще это нужно делать!?

Когда показываются ошибки, а они неминуемо будут у вас происходить – это не есть хорошо! Не просто от вида с типа »Warning» — но и с точки зрения хакеров.

Что имеется ввиду!? Когда выскакивает какая-то ошибка, то показывается абсолютный путь до файла… А этим можно воспользоваться!

И в зависимости от настроек вашего сервера – настройки вывода либо скрытия ошибок может быть разным!

Навигация по странице :

  1. ini_set(‘display_errors’, ‘off’)
  2. Скрыть ошибку notice
  3. Скрыть ошибку через ini файл
  4. Скрыть ошибку через .htaccess файл
  5. Скрыть ошибки через панель администратора
  6. Php не показывает ошибки белый экран.
  7. Мой способ скрыть ошибки php
  1. ini_set(‘display_errors’, ‘off’)

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

    Я пользуюсь простой записью вида :

    ini_set(‘display_errors’, ‘off’);

    Если «off» отключено, если «on» включено. Данную запись нужно поставить в начало страницы.

    Естественно, что желательно иметь сайт построенный на «инклудах», чтобы данную запись поместить на одну страницу а не тыкать в каждую страницу, либо это должен быть движок.

    Как собственно данный сайт сделанный на html + php + css с использованием икнклудов.

  2. Скрыть ошибку notice

    Иногда встречается ошибка notice — её можно забить таким образом:

    error_reporting( E_ERROR );

  3. Скрыть ошибку через ini файл

    Открываем файл ini — он должен находиться выше корневой папки.. Ищем строку и ставим вместо on — off

    display_errors= on

  4. Скрыть ошибку через .htaccess файл

    В корневой папке должен быть файл htaccess

    php_flag display_errors off

    php_flag display_startup_errors off

  5. Скрыть ошибки через панель администратора

    Можно включать, отключать показ ошибок через панель администрирования, если мы говорим о том хостинге на котором я нахожусь! (Кстати рекомендую – отличный хостинг! )
    Для примера давайте покажу, где отключать включать ошибки php у провайдера RUWEB.NET

    Заходим в админ панель хостинга, ищем настройки php.

    php показать/скрыть  ошибки

    Ну и далее собственно , включаем или отключаем показ ошибок на сайте.

    php показать/скрыть  ошибки

  6. Php не показывает ошибки белый экран.

    Если у вас вместо ошибок показывается белый экран, либо просто не выводятся ошибки, то возможно несколько вариантов.

    Нельзя утверждать на все 100%, но возможно от настроек файла ini или же настроек через панель администрирования…

    Но одно можно утверждать на 100% — если ошибка не выводится. то что-то этому мешает!

  7. Мой способ скрыть ошибки php

    Не знаю какой способ скрыть ошибки вы выберете, и все те способы, которые были описаны сверху- имеют право на существование, но я использую такой способ сокрытия ошибок, до безобразия примитивный!

    Перёд include у меня стоит собака «@» — она будет забивать любую ошибку в коде php.

    @Include(config.php)

    В случае, если я захожу на сайт в качестве админа, а так происходит в любом случае. То я увижу любую ошибку, а вот пользователь увидит пустую страницу.

    Мой способ скрыть ошибки php

Можете не благодарить, лучше помогите!

COMMENTS+

 
BBcode


Источники: 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 включить вывод ошибок. Мы также обсудим, как записывать ошибки в журнал (лог).

Как быстро показать все ошибки PHP

Самый быстрый способ отобразить все ошибки и предупреждения php — добавить эти строки в файл PHP:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Что именно делают эти строки?

Функция ini_set попытается переопределить конфигурацию, найденную в вашем ini-файле PHP.

Display_errors и display_startup_errors — это только две из доступных директив. Директива display_errors определяет, будут ли ошибки отображаться для пользователя. Обычно директива dispay_errors не должна использоваться для “боевого” режима работы сайта, а должна использоваться только для разработки.

display_startup_errors — это отдельная директива, потому что display_errors не обрабатывает ошибки, которые будут встречаться во время запуска PHP. Список директив, которые могут быть переопределены функцией ini_set, находится в официальной документации .

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

Отображение ошибок PHP через настройки в php.ini

Если ошибки в браузере по-прежнему не отображаются, то добавьте директиву:

display_errors = on

Директиву display_errors следует добавить в ini-файл PHP. Она отобразит все ошибки, включая синтаксические ошибки, которые невозможно отобразить, просто вызвав функцию ini_set в коде PHP.

Актуальный INI-файл можно найти в выводе функции phpinfo (). Он помечен как “загруженный файл конфигурации” (“loaded configuration file”).

Отображать ошибки PHP через настройки в .htaccess

Включить или выключить отображение ошибок можно и с помощью файла .htaccess, расположенного в каталоге сайта.

php_flag display_startup_errors on
php_flag display_errors on

.htaccess также имеет директивы для display_startup_errors и display_errors.

Вы можете настроить display_errors в .htaccess или в вашем файле PHP.ini. Однако многие хостинг-провайдеры не разрешают вам изменять ваш файл PHP.ini для включения display_errors.

В файле .htaccess также можно включить настраиваемый журнал ошибок, если папка журнала или файл журнала доступны для записи. Файл журнала может быть относительным путем к месту расположения .htaccess или абсолютным путем, например /var/www/html/website/public/logs.

php_value error_log logs/all_errors.log

Включить подробные предупреждения и уведомления

Иногда предупреждения приводят к некоторым фатальным ошибкам в определенных условиях. Скрыть ошибки, но отображать только предупреждающие (warning) сообщения можно вот так:

error_reporting(E_WARNING);

Для отображения предупреждений и уведомлений укажите «E_WARNING | E_NOTICE».

Также можно указать E_ERROR, E_WARNING, E_PARSE и E_NOTICE в качестве аргументов. Чтобы сообщить обо всех ошибках, кроме уведомлений, укажите «E_ALL & ~ E_NOTICE», где E_ALL обозначает все возможные параметры функции error_reporting.

Более подробно о функции error_reporting ()

Функция сообщения об ошибках — это встроенная функция PHP, которая позволяет разработчикам контролировать, какие ошибки будут отображаться. Помните, что в PHP ini есть директива error_reporting, которая будет задана ​​этой функцией во время выполнения.

error_reporting(0);

Для удаления всех ошибок, предупреждений, сообщений и уведомлений передайте в функцию error_reporting ноль. Можно сразу отключить сообщения отчетов в ini-файле PHP или в .htaccess:

error_reporting(E_NOTICE);

PHP позволяет использовать переменные, даже если они не объявлены. Это не стандартная практика, поскольку необъявленные переменные будут вызывать проблемы для приложения, если они используются в циклах и условиях.

Иногда это также происходит потому, что объявленная переменная имеет другое написание, чем переменная, используемая для условий или циклов. Когда E_NOTICE передается в функцию error_reporting, эти необъявленные переменные будут отображаться.

error_reporting(E_ALL & ~E_NOTICE);

Функция сообщения об ошибках позволяет вам фильтровать, какие ошибки могут отображаться. Символ «~» означает «нет», поэтому параметр ~ E_NOTICE означает не показывать уведомления. Обратите внимание на символы «&» и «|» между возможными параметрами. Символ «&» означает «верно для всех», в то время как символ «|» представляет любой из них, если он истинен. Эти два символа имеют одинаковое значение в условиях PHP OR и AND.

error_reporting(E_ALL);
error_reporting(-1);
ini_set('error_reporting', E_ALL);

Эти три строки кода делают одно и то же, они будут отображать все ошибки PHP. Error_reporting(E_ALL) наиболее широко используется разработчиками для отображения ошибок, потому что он более читабелен и понятен.

Включить ошибки php в файл с помощью функции error_log ()

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

Простой способ использовать файлы журналов — использовать функцию error_log, которая принимает четыре параметра. Единственный обязательный параметр — это первый параметр, который содержит подробную информацию об ошибке или о том, что нужно регистрировать. Тип, назначение и заголовок являются необязательными параметрами.

error_log("There is something wrong!", 0);

Параметр type, если он не определен, будет по умолчанию равен 0, что означает, что эта информация журнала будет добавлена ​​к любому файлу журнала, определенному на веб-сервере.

error_log("Email this error to someone!", 1, "someone@mydomain.com");

Параметр 1 отправит журнал ошибок на почтовый ящик, указанный в третьем параметре. Чтобы эта функция работала, PHP ini должен иметь правильную конфигурацию SMTP, чтобы иметь возможность отправлять электронные письма. Эти SMTP-директивы ini включают хост, тип шифрования, имя пользователя, пароль и порт. Этот вид отчетов рекомендуется использовать для самых критичных ошибок.

error_log("Write this error down to a file!", 3, "logs/my-errors.log");

Для записи сообщений в отдельный файл необходимо использовать тип 3. Третий параметр будет служить местоположением файла журнала и должен быть доступен для записи веб-сервером. Расположение файла журнала может быть относительным путем к тому, где этот код вызывается, или абсолютным путем.

Журнал ошибок PHP через конфигурацию веб-сервера

Лучший способ регистрировать ошибки — это определить их в файле конфигурации веб-сервера.

Однако в этом случае вам нужно попросить администратора сервера добавить следующие строки в конфигурацию.

Пример для Apache:

ErrorLog "/var/log/apache2/my-website-error.log"

В nginx директива называется error_log.

error_log /var/log/nginx/my-website-error.log;

Теперь вы знаете, как в PHP включить отображение ошибок. Надеемся, что эта информация была вам полезна.

How to show or hide error messages in PHP. There are several ways to do this; from within the PHP scripts themselves, from php.ini, or from changing Apache configuration files.

2939 views

d

By. Jacob

Edited: 2021-02-07 23:08

There are a few ways to control error reporting for PHP scripts; often you would simply configure how to handle errors from within php.ini, but it is also possible to enable and disable errors from individual PHP scripts.

The error_reporting function controls the level of error reporting; you can either use a combination of values or a single value. Possible options include:

  1. E_ALL
  2. E_NOTICE
  3. E_WARNING
  4. E_STRICT

To disable errors from a PHP script, you may place the following somewhere towards the top:

ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(-1);

Errors should be disabled when using a custom error handler.

To enable errors, you may instead use the following:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

When using a combination of values, each value should be separated by a pipe (|) character:

error_reporting(E_NOTICE | E_WARNING);

Finally, to only exclude a single error type, use the tilde (~) character in front of the type you want to exclude:

error_reporting(~E_WARNING);

Toggling errors in php.ini

How you choose to control errors is not usually important, but doing it from PHP is more friendly towards other developers, since they will more easily be able to make changes.

Sometimes it may make more sense to disable errors from within php.ini instead of attempting to toggle errors on/off from individual PHP scripts. It is recommended to disable errors in production environments, and only enable them doing development. Developers should have full control over their development environment, and therefor it is best to control error reporting from individual scripts or from php.ini directly — avoid using htaccess as much as possible.

Note. You can skip to step 2. if you already know where to find php.ini.

1. Errors can be toggled by adjusting the relevant settings in the php.ini file — the difficult part is to find the right .ini file to edit.

PHP will often have multiple versions installed; this possibly happens after updating, and might, for example, cause both PHP 7.3 and PHP 7.4 to be installed. The file you need to change is usually the latest version; but sometimes PHP-FPM might not load the correct version — that is a separate issue, and not something I will explain how to fix in this article.

But, how to approach it will mainly depend on how you installed PHP and which operating system you are using. For Debian and Ubuntu based Linux distributions, the php.ini file may be located in /etc/php/7.4/apache2/ if using the Apache module, or /etc/php/7.4/fpm/ if using PHP-FPM.

If you are having trouble finding the right file, you can create a script with the following content:

Open the file in your browser and search for «php.ini» on the page. It should be located in the «Loaded Configuration File» row of the table.

2. Once you have located the file, you can change the following values to enable errors:

display_errors = on
display_startup_errors = on
error_reporting = E_ALL

Or, if you want to disable errors:

display_errors = off
display_startup_errors = off
error_reporting = -1

Using htaccess

If you are using the Apache HTTP server, you will also be able to toggle errors from .htaccess files. It is often recommended to disable htaccess in the server configuration in order to speed up the server, but this is probably not going to matter much for most people.

Toggling PHP errors from htaccess is done using php_flag in front of the php.ini option you want to change.

To turn on errors in htaccess:

php_flag display_startup_errors on
php_flag display_errors on

And to turn off errors in htaccess:

php_flag display_startup_errors off
php_flag display_errors off

The error reporting level is not easily controlled with htaccess.

  1. How to create a custom error handler for PHP that handles non-fetal errors.

  2. The fread function can be dangerous when used inside a loop in PHP, find out how to secure it in this article.

  3. E_STRICT will only show you warnings about deprecated PHP features and things that might not be future-proof, it will not show you notices or warnings; E_ALL includes everything, and that includes E_STRICT messages.

  4. Developers can trigger custom PHP error messages using the trigger_error function; but throwing an exception is often better.

More in: PHP Errors

Понравилась статья? Поделить с друзьями:
  • Discord error 80070005
  • Discord error 429
  • Disable cache error process terminated
  • Disable bios memory options such as caching or shadowing как исправить windows 7
  • Dis26012 beko ошибка e02