Как скрывать ошибки в php

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

Поведение этих функций зависит от установок в 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 Не имеет смысла в версии PHP 8.0.0, удалено в версии PHP 8.1.0.
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

14 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 have some PHP code. When I run it, a warning message appears.

How can I remove/suppress/ignore these warning messages?

Banee Ishaque K's user avatar

asked Jan 1, 2010 at 0:32

Alireza's user avatar

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's user avatar

Sean Bright

118k17 gold badges138 silver badges146 bronze badges

answered Jan 1, 2010 at 0:37

Tatu Ulmanen's user avatar

Tatu UlmanenTatu Ulmanen

123k34 gold badges186 silver badges184 bronze badges

4

You can put an @ in front of your function call to suppress all error messages.

@yourFunctionHere();

Mark Amery's user avatar

Mark Amery

141k78 gold badges404 silver badges457 bronze badges

answered Jan 1, 2010 at 0:41

PetPaulsen's user avatar

PetPaulsenPetPaulsen

3,3922 gold badges22 silver badges33 bronze badges

11

To suppress warnings while leaving all other error reporting enabled:

error_reporting(E_ALL ^ E_WARNING); 

Mark Amery's user avatar

Mark Amery

141k78 gold badges404 silver badges457 bronze badges

answered Feb 11, 2011 at 8:08

Karthik's user avatar

KarthikKarthik

1,4183 gold badges17 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's user avatar

MD XF

7,8007 gold badges40 silver badges71 bronze badges

answered Jan 22, 2013 at 3:16

mohan.gade's user avatar

mohan.gademohan.gade

1,0951 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

zstate's user avatar

zstatezstate

1,9951 gold badge18 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

Vijay Lathiya's user avatar

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's user avatar

honk

9,05711 gold badges74 silver badges83 bronze badges

answered Feb 27, 2018 at 8:43

navid's user avatar

navidnavid

9628 silver badges19 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's user avatar

FelixSFD

5,98210 gold badges43 silver badges115 bronze badges

answered Dec 30, 2012 at 20:03

DaveWalley's user avatar

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

Sebastian Piskorski's user avatar

You could suppress the warning using error_reporting but the much better way is to fix your script in the first place.

Dharman's user avatar

Dharman

30.5k22 gold badges84 silver badges133 bronze badges

answered Jan 1, 2010 at 0:34

Pekka's user avatar

PekkaPekka

440k141 gold badges972 silver badges1085 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

Jsowa's user avatar

JsowaJsowa

8,8245 gold badges53 silver badges60 bronze badges

  • Konata69lol

Здравствуйте! Обычно для включения максимально подробного вывода ошибок я использую этот код:

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

У меня вопрос. Чтобы отключить вывод ошибок вообще (если заливаю сайт на прод.), то нужен тот же самый код, только везде значения — 0? Или хватит только одной строчки? Если одной, то какая из них?


  • Вопрос задан

    более трёх лет назад

  • 18911 просмотров

В точке входа в проект (index.php), в самом начале выставить все по нулям

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

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

Пользователю не нужно показывать подробности ошибок (стектрейс). Достаточно отобразить страницу с кратким описанием (понятным пользователю) ошибки, например «404 Не найдено то-то» или «500 Ошибка сервера».

Еще вариант — средиректить пользователя на главную страницу и флеш сообщением вывести краткое описание ошибки.

Я бы не рекомендовал затыкать вывод ошибок полностью, это bad practice. Пишу на PHP уже лет 10, и только недавно установил уровень E_ALL, исправление всех ошибок заняло где-то неделю, но сейчас я нарадоваться не могу, ибо ругается даже на отсутствие ключей в массиве (ибо в большинстве случаев если обращаются к какому-либо ключу, он должен быть в массиве, а его отсутствие — следствие какой-то проблемы). Об отсутствии какой-либо переменной я и вовсе не говорю. Для юзера достаточно просто подавить вывод ошибок (ибо сайт не будет работать только при E_FATAL и E_COMPILE, когда вообще не получается получить байткод), а для разрабов ошибки можно писать хоть в текстовый файл, используя собственный обработчик set_error_handler ().

Пригласить эксперта

Доступ к php.ini есть? Если да, то добавьте
display_errors = off

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


  • Показать ещё
    Загружается…

12 июн. 2023, в 21:24

2000 руб./в час

12 июн. 2023, в 21:17

30000 руб./за проект

12 июн. 2023, в 20:59

1000 руб./в час

Минуточку внимания

When you are sure your script is perfectly working, you can get rid of warning and notices like this: Put this line at the beginning of your PHP script:

error_reporting(E_ERROR);

Before that, when working on your script, I would advise you to properly debug your script so that all notice or warning disappear one by one.

So you should first set it as verbose as possible with:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

UPDATE: how to log errors instead of displaying them

As suggested in the comments, the better solution is to log errors into a file so only the PHP developer sees the error messages, not the users.

A possible implementation is via the .htaccess file, useful if you don’t have access to the php.ini file (source).

# Suppress PHP 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

# Enable PHP error logging
php_flag  log_errors on
php_value error_log  /home/path/public_html/domain/PHP_errors.log

# Prevent access to PHP error log
<Files PHP_errors.log>
 Order allow,deny
 Deny from all
 Satisfy All
</Files>

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

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

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)

2018/07/09

Марат

986

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


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

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

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

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

Banee Ishaque K's user avatar | 20 июня 2013 18:26

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

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)

2018/07/09

Марат

986

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


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

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

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

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

Banee Ishaque K's user avatar

asked Jan 1, 2010 at 0:32

Alireza's user avatar

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's user avatar

Sean Bright

117k17 gold badges136 silver badges145 bronze badges

answered Jan 1, 2010 at 0:37

Tatu Ulmanen's user avatar

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's user avatar

Mark Amery

137k78 gold badges401 silver badges450 bronze badges

answered Jan 1, 2010 at 0:41

PetPaulsen's user avatar

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's user avatar

Mark Amery

137k78 gold badges401 silver badges450 bronze badges

answered Feb 11, 2011 at 8:08

Karthik's user avatar

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's user avatar

MD XF

7,6927 gold badges40 silver badges68 bronze badges

answered Jan 22, 2013 at 3:16

mohan.gade's user avatar

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

zstate's user avatar

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

Vijay Lathiya's user avatar

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's user avatar

honk

8,76711 gold badges79 silver badges79 bronze badges

answered Feb 27, 2018 at 8:43

navid's user avatar

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's user avatar

FelixSFD

5,93210 gold badges46 silver badges115 bronze badges

answered Dec 30, 2012 at 20:03

DaveWalley's user avatar

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

Sebastian Piskorski's user avatar

You could suppress the warning using error_reporting but the much better way is to fix your script in the first place.

Dharman's user avatar

Dharman

29.2k21 gold badges79 silver badges131 bronze badges

answered Jan 1, 2010 at 0:34

Pekka's user avatar

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

Jsowa's user avatar

JsowaJsowa

8,0264 gold badges46 silver badges55 bronze badges

Можно ли в PHP отключить ошибки и когда это нужно делать

От автора: за свои ошибки нужно отвечать! Их нужно исправлять! Но ведь можно исправить как-нибудь потом, когда будет время? В настоящей жизни такое не всегда возможно, а на своем сайте для этого нужно лишь в 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

Скачать

Понравилась статья? Поделить с друзьями:
  • Как скорректировать сзв тд если ошибка в фио
  • Как скопировать файлы с диска с ошибками
  • Как скопировать файлы с диска ошибка
  • Как скопировать файл с ошибкой чтения
  • Как скопировать файл при ошибке crc