Відповіді:
Ви дійсно повинні виправити те, що викликає попередження, але ви можете контролювати видимість помилок за допомогою error_reporting()
. Щоб пропустити попереджувальні повідомлення, ви можете використовувати щось на кшталт:
error_reporting(E_ERROR | E_PARSE);
E_ALL ^ E_WARNING
, що дозволяє всі повідомлення про помилки, окрім попереджень, виглядає як кращий вибір аргументу error_reporting
.
Ви можете поставити @ перед своїм викликом функції, щоб придушити всі повідомлення про помилки.
@yourFunctionHere();
dns_get_record
кидають попередження. Ваш код може компенсувати попередження, але він все-таки видає їх. Вимкнення повідомлень про помилки працює на виробничому сервері, але не на сервері розробок. Якщо ви генеруєте XML-вміст, попередження призведе до того, що браузер не відображатиметься, оскільки сервер надсилає неправильну XML, спричинену попередженням. Іноді ви хочете, що це на розробці, але не для чогось, викликаного тимчасовим збоєм пошуку DNS, який ви вже компенсуєте.
Якщо ви не хочете показувати попередження, а також помилки
// Turn off all error reporting
error_reporting(0);
в Core Php, щоб приховати попереджувальне повідомлення, встановлене error_reporting (0) вгорі загальних, включають файл або окремий файл.
У Wordpress приховати Попередження та повідомлення додайте наступний код у файл wp-config.php
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);
Не точно відповідаючи на питання, але я думаю, що це кращий компроміс у деяких ситуаціях:
У мене з’явилося попереджувальне повідомлення в результаті заяви printf () у сторонній бібліотеці. Я точно знав, в чому причина - тимчасова обробка, тоді як сторона фіксувала свій код. Я погоджуюся, що попередження не слід придушувати, але я не міг продемонструвати свою роботу клієнту, коли на екрані з’являється попереджувальне повідомлення. Моє рішення:
printf('<div style="display:none">');
...Third-party stuff here...
printf('</div>');
Попередження все ще було у джерелі сторінки як нагадування для мене, але невидиме для клієнта.
ob_start()
і ob_end_clean()
замість цього. Таким чином, матеріал навіть не надсилається до браузера (що він робить тут).
Я думаю, що краще рішення - це конфігурація .htaccess. Таким чином, вам не потрібно змінювати код програми. Ось директиви для 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
Ви можете придушити попередження, використовуючи error_reporting, але набагато кращим способом є в першу чергу виправити сценарій.
Якщо ви не знаєте як, відредагуйте своє запитання та покажіть нам відповідну лінію та попередження.
Відповідь у оператора управління помилками вже є, але пояснення не вистачає. Ви можете використовувати @
оператор з кожним виразом, і він приховує помилки (крім фатальних помилок).
@$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()
Для налагодження це швидкий і ідеальний метод. Але ніколи не слід використовувати його на виробництві, а також постійно включати його у локальну версію. Це доставить вам багато зайвого роздратування.
Ви повинні замість цього врахувати:
1. Установки повідомлень про помилки, як зазначено у прийнятій відповіді.
error_reporting(E_ERROR | E_PARSE);
або з налаштувань PHP INI
ini_set('display_errors','Off');
2. Вилов винятків
try {
$var->method();
} catch (Error $e) {
// Handle error
echo $e->getMessage();
}