|
|
| 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 — все ошибки |
В файле 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» — но и с точки зрения хакеров.
Что имеется ввиду!? Когда выскакивает какая-то ошибка, то показывается абсолютный путь до файла… А этим можно воспользоваться!
И в зависимости от настроек вашего сервера – настройки вывода либо скрытия ошибок может быть разным!
Навигация по странице :
- ini_set(‘display_errors’, ‘off’)
- Скрыть ошибку notice
- Скрыть ошибку через ini файл
- Скрыть ошибку через .htaccess файл
- Скрыть ошибки через панель администратора
- Php не показывает ошибки белый экран.
- Мой способ скрыть ошибки php
ini_set(‘display_errors’, ‘off’)
Есть множество различных способов, какие-то могут работать у вас на сайте, какие-то нет.
Я пользуюсь простой записью вида :
ini_set(‘display_errors’, ‘off’);
Если «off» отключено, если «on» включено. Данную запись нужно поставить в начало страницы.
Естественно, что желательно иметь сайт построенный на «инклудах», чтобы данную запись поместить на одну страницу а не тыкать в каждую страницу, либо это должен быть движок.
Как собственно данный сайт сделанный на html + php + css с использованием икнклудов.
Скрыть ошибку notice
Иногда встречается ошибка notice — её можно забить таким образом:
error_reporting( E_ERROR );
Скрыть ошибку через ini файл
Открываем файл ini — он должен находиться выше корневой папки.. Ищем строку и ставим вместо on — off
display_errors= on
Скрыть ошибку через .htaccess файл
В корневой папке должен быть файл htaccess
php_flag display_errors off
php_flag display_startup_errors off
Скрыть ошибки через панель администратора
Можно включать, отключать показ ошибок через панель администрирования, если мы говорим о том хостинге на котором я нахожусь! (Кстати рекомендую – отличный хостинг! )
Для примера давайте покажу, где отключать включать ошибки php у провайдера RUWEB.NET
Заходим в админ панель хостинга, ищем настройки php.

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

Php не показывает ошибки белый экран.
Если у вас вместо ошибок показывается белый экран, либо просто не выводятся ошибки, то возможно несколько вариантов.
Нельзя утверждать на все 100%, но возможно от настроек файла ini или же настроек через панель администрирования…
Но одно можно утверждать на 100% — если ошибка не выводится. то что-то этому мешает!
Мой способ скрыть ошибки php
Не знаю какой способ скрыть ошибки вы выберете, и все те способы, которые были описаны сверху- имеют право на существование, но я использую такой способ сокрытия ошибок, до безобразия примитивный!
Перёд include у меня стоит собака «@» — она будет забивать любую ошибку в коде php.
@Include(config.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?
![]()
asked Jan 1, 2010 at 0:32
1
You really should fix whatever’s causing the warning, but you can control visibility of errors with error_reporting(). To skip warning messages, you could use something like:
error_reporting(E_ERROR | E_PARSE);
Sean Bright
117k17 gold badges136 silver badges145 bronze badges
answered Jan 1, 2010 at 0:37
Tatu UlmanenTatu Ulmanen
122k34 gold badges185 silver badges184 bronze badges
4
You can put an @ in front of your function call to suppress all error messages.
@yourFunctionHere();
![]()
Mark Amery
137k78 gold badges401 silver badges450 bronze badges
answered Jan 1, 2010 at 0:41
PetPaulsenPetPaulsen
3,3622 gold badges22 silver badges32 bronze badges
11
To suppress warnings while leaving all other error reporting enabled:
error_reporting(E_ALL ^ E_WARNING);
![]()
Mark Amery
137k78 gold badges401 silver badges450 bronze badges
answered Feb 11, 2011 at 8:08
![]()
KarthikKarthik
1,3883 gold badges16 silver badges29 bronze badges
If you don’t want to show warnings as well as errors use
// Turn off all error reporting
error_reporting(0);
Error Reporting — PHP Manual
![]()
MD XF
7,6927 gold badges40 silver badges68 bronze badges
answered Jan 22, 2013 at 3:16
mohan.gademohan.gade
1,0651 gold badge9 silver badges15 bronze badges
0
If you want to suppress the warnings and some other error types (for example, notices) while displaying all other errors, you can do:
error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE);
answered Jan 10, 2018 at 17:13
![]()
zstatezstate
1,9051 gold badge17 silver badges20 bronze badges
in Core Php to hide warning message set error_reporting(0) at top of common include file or individual file.
In WordPress hide Warnings and Notices add following code in wp-config.php file
ini_set('log_errors','On');
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
answered May 12, 2017 at 5:04
1
I do it as follows in my php.ini:
error_reporting = E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
This logs only fatal errors and no warnings.
honk
8,76711 gold badges79 silver badges79 bronze badges
answered Feb 27, 2018 at 8:43
navidnavid
8978 silver badges18 bronze badges
0
Not exactly answering the question, but I think this is a better compromise in some situations:
I had a warning message as a result of a printf() statement in a third-party library. I knew exactly what the cause was — a temporary work-around while the third-party fixed their code. I agree that warnings should not be suppressed, but I could not demonstrate my work to a client with the warning message popping up on screen. My solution:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
Warning was still in page source as a reminder to me, but invisible to the client.
FelixSFD
5,93210 gold badges46 silver badges115 bronze badges
answered Dec 30, 2012 at 20:03
DaveWalleyDaveWalley
80710 silver badges22 bronze badges
4
I think that better solution is configuration of .htaccess In that way you dont have to alter code of application. Here are directives for Apache2
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0
answered May 10, 2014 at 16:34
![]()
You could suppress the warning using error_reporting but the much better way is to fix your script in the first place.
![]()
Dharman♦
29.2k21 gold badges79 silver badges131 bronze badges
answered Jan 1, 2010 at 0:34
![]()
PekkaPekka
438k140 gold badges968 silver badges1083 bronze badges
1
There is already answer with Error Control Operator but it lacks of explanation. You can use @ operator with every expression and it hides errors (except of Fatal Errors).
@$test['test']; //PHP Notice: Undefined variable: test
@(14/0); // PHP Warning: Division by zero
//This is not working. You can't hide Fatal Errors this way.
@customFuntion(); // PHP Fatal error: Uncaught Error: Call to undefined function customFuntion()
For debugging it’s fast and perfect method. But you should never ever use it on production nor permanent include in your local version. It will give you a lot of unnecessary irritation.
You should consider instead:
1. Error reporting settings as mentioned in accepted answer.
error_reporting(E_ERROR | E_PARSE);
or from PHP INI settings
ini_set('display_errors','Off');
2. Catching exceptions
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}
answered May 24, 2020 at 3:28
![]()
JsowaJsowa
8,0264 gold badges46 silver badges55 bronze badges

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