- How to remove warnings in PHP.
- Hiding PHP warnings with the error_reporting function.
- Can I hide PHP notice messages as well?
- Stopping warning messages from being displayed.
- Using the @ character to suppress errors.
- Why should I not suppress all warning messages?
- Как включить или выключить отображение ошибок в PHP?
- В скрипте PHP
- В файле .htaccess
- В файле php.ini
- В каком порядке обрабатывается параметр ошибок
- Как включить вывод ошибок PHP
- Через .htaccess
- Через логи PHP
- Через файл php.ini
How to remove warnings in PHP.
In this guide, we will show you how to remove warning messages in PHP.
We will also explain why it is generally a bad idea to hide all warning messages.
Hiding all warning messages is basically the same as turning up the music in your car so that you can’t hear the worrying noise that your engine is making.
Hiding PHP warnings with the error_reporting function.
The error_reporting function allows us to tell PHP which errors to report.
For example, if we want to display all error messages except warnings, we can use the following line of code:
//Report all errors except warnings. error_reporting(E_ALL ^ E_WARNING);
Typically speaking, the error_reporting function should be placed at the top of your code. This is because the function can only control errors that occur in the code below it.
Can I hide PHP notice messages as well?
If you also want to hide notice messages, then you can set the following level in the error_reporting function:
//Only report fatal errors and parse errors. error_reporting(E_ERROR | E_PARSE); //This will usually create a division by 0 //warning message. echo 1 / 0; //This will usually create an array to string //notice message. echo array();
In the code snippet above, we told PHP that it should only report fatal errors (E_ERROR) and parse errors (E_PARSE).
Afterwards, we created two lines of code:
- We divided 1 by 0, which would typically result in a “Warning: Division by zero” message.
- We then attempted to echo out an array. Under normal circumstances, this would cause the following notice: “Notice: Array to string conversion”
If you run the example above, you will see that the page doesn’t display any notices or warnings. Furthermore, if you check the PHP error log, you will see that they also haven’t been logged.
Stopping warning messages from being displayed.
If you simply want to stop warning messages from being displayed, but not prevent them from being logged, then you can use the following piece of code:
//Tell PHP to log errors ini_set('log_errors', 'On'); //Tell PHP to not display errors ini_set('display_errors', 'Off'); //Set error_reporting to E_ALL ini_set('error_reporting', E_ALL );
Here, we are using PHP’s ini_set function to dynamically modify the settings in our php.ini file:
- We set log_errors to On , which means that PHP will log warnings to our error log.
- We set display_errors to Off . As a result, PHP will not output errors to the screen.
- Finally, we set error_reporting to E_ALL.
Note: If you can access your php.ini file, then you should probably edit these values directly instead of changing them on the fly.
Using the @ character to suppress errors.
In some cases, you might not have control over certain warnings.
For example, a GET request to an external API could fail, resulting in a “failed to open stream” warning. To prevent this from occurring, we could use the @ character like so:
//API URL $url = 'http://example.com/api'; //Attempt to get contents of that URL $result = @file_get_contents($url);
As you can see, we have placed the @ (AT) character next to our function call. This means that if file_get_contents fails, it will not throw an E_WARNING message.
This works because the @ character is an error control operator that tells PHP to ignore any errors.
Note that error suppression should be used sparingly. Abusing this control operator can lead to issues that are difficult to debug.
Why should I not suppress all warning messages?
An E_WARNING message is an error that does not prevent the rest of your PHP script from executing. Although it does not halt the script, it is still an error. It means that something in your code is not working the way that it is supposed to be working.
You should always try to address the issue instead of hiding it. Otherwise, it may lead to other bugs further down the line.
If you sweep these warning messages under the rug, you will be limiting your ability to spot serious problems in your application.
For example, what if your online shop had a “division by one” error that was preventing certain users from adding multiple items to their basket? Perhaps this issue only occurs when the user applies an expired coupon. Or maybe it happens after they reduce the quantity of an item in their basket.
Either way, something bad is happening and you don’t know about it.
You cannot rely on end users to report issues. Many of them will either think that they are using the website incorrectly or they will simply forget about it and move on. Internet users are impatient. They usually won’t take the time to fill out contact forms or attach screenshots.
As a result, this lazy approach of “nuking” all warning messages has caused your online shop to lose out on sales.
Как включить или выключить отображение ошибок в PHP?
Часто слышал о такой проблеме от других пользователей. Одним из-за хостера нужно скрыть появляющиеся ошибки, другим наоборот — понять, что происходит с их кодом, потому что ни одна ошибка не показывается. В этой статье постараюсь показать все основные способы отобразить / скрыть ошибки.
В скрипте PHP
1) В PHP есть всего лишь один оператор, который поддерживает систему управления ошибками — это знак @. Он позволяет проигнорировать сообщение любое сообщение об ошибке. Его нужно ставить ПЕРЕД выражением, которое может её содержать.
В примере специально допущена ошибка, но она НЕ будет отображена
2) Также можно перед проверяемым скриптом PHP можно вставить настройку параметра отображения ошибок (display_errors). Он может приобретать значение либо On (показывать), либо Off (скрыть).
ini_set('display_errors','On');
error_reporting('E_ALL');
И соответственно после кода, который проверялся на ошибки, выставить параметр обратно.
Например, Вы хотите увидеть ошибки в скрипте
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"
В файле php.ini
Как видите, параметр можно указать в нескольких местах. Однако, если у Вы хотите, чтобы целиком на сайте этот параметр имел определённое значение, то проще выставить его в файле php.ini.(к нему на хостинге не всегда может быть доступ), но в этом случае можно будет даже обойти настройки всего хостинга
error_reporting = E_ALL
display_errors On
В верхней строке выбираем все виды ошибок, в нижней даём добро на их отображение.
После правок необходимо перезапустить Apache, чтобы настройки были изменены и вступили в силу (graceful или restart):
sudo apachectl -k graceful
В каком порядке обрабатывается параметр ошибок
В самом начале учитывается параметр php.ini , затем .htaccess , а после то, что указано непосредственно в скрипте PHP. Так что если что-то не сработало, то смотрим по цепочку выше, возможно, там настройка другая.
Как обычно спасибо за внимание и удачи! Надеюсь статья была полезна!
Как включить вывод ошибок PHP
Хостинг-провайдеры нередко отключают или блокируют вывод всех ошибок и предупреждений. Такие ограничения вводятся не просто так. Дело в том, что на рабочих серверах крайне не рекомендуется держать ошибки в открытом доступе. Информация о неисправностях может стать «наживкой» для злоумышленников.
При этом в процессе разработки сайтов и скриптов, очень важно отслеживать возникающие предупреждения. Знать о сбоях и неисправностях также важно и системным администраторам — это позволяет предотвратить проблемы на сайте или сервере.
Самый оптимальный вариант — не просто скрыть показ ошибок, но и настроить запись о них в логах. Это позволит отслеживать предупреждения и не подвергать сервер угрозе.
В статье мы расскажем, как включить и отключить через .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 отображение ошибок.