Мені потрібно налаштувати свій скрипт PHP вгорі, щоб відключити повідомлення про помилки для суворих стандартів.
Хтось може допомогти?
Мені потрібно налаштувати свій скрипт PHP вгорі, щоб відключити повідомлення про помилки для суворих стандартів.
Хтось може допомогти?
Відповіді:
Ви хочете вимкнути повідомлення про помилки чи просто перешкодити користувачеві бачити це? Зазвичай корисно реєструвати помилки навіть на виробничому сайті.
# in your PHP code:
ini_set('display_errors', '0'); # don't show any errors...
error_reporting(E_ALL | E_STRICT); # ...but do log them
Вони будуть входити у ваш стандартний системний журнал або використовуватимуть error_log
директиву, щоб вказати, куди потрібно йти помилки.
php.ini
файлі, наприклад, якщо ви не можете змінити код PHP.
php.ini
або .htaccess
або де - небудь в моєму PHP коду.
Без помилок.
error_reporting(0);
або просто не суворо
error_reporting(E_ALL ^ E_STRICT);
і якщо ви хочете знову показати всі помилки, використовуйте
error_reporting(-1);
^
це корисно лише для опускання помилок одного типу. Якщо ви хочете вимкнути додаткові типи, вам слід скористатися E_ALL & ~E_DEPRECATED & ~E_STRICT
форматом. Або, можливо, (E_ALL & ~(E_DEPRECATED | E_STRICT))
формат.
ini_set('error_reporting', E_ALL&~E_STRICT);
Пригнічувати повідомлення про помилки ini_set('error_reporting', E_ALL^E_STRICT);
^
("xor"), а не & ~
("і не") - це погана ідея ! ^
залежить від припущення, що, наприклад, E_STRICT є частиною E_ALL і завжди буде її частиною. Це погано, оскільки E_ALL змінився в минулому (E_STRICT не був його минулим, але зараз з PHP 5.4). Якщо припущення не вдасться одного дня, воно ^
не тільки зламається, але фактично зробить протилежне тому, що він повинен робити: Це дозволить E_STRICT завдяки тому, як працює XOR ( ^
). & ~
однак завжди вимикає E_STRICT, незалежно від поточного значення E_ALL. Тому & ~
слід використовувати.
Усі вищезазначені рішення є правильними. Але, коли ми говоримо про звичайний PHP-додаток, вони повинні включатись на кожну сторінку, яку вона вимагає. Спосіб вирішити це - через .htaccess
кореневу папку. Просто щоб приховати помилки. [Помістіть один із наступних рядків у файл]
php_flag display_errors off
Або
php_value display_errors 0
Далі, щоб встановити повідомлення про помилки
php_value error_reporting 30719
Якщо вам цікаво, як 30719
прийшло значення , E_ALL (32767), E_STRICT (2048) насправді є постійними, що містять числове значення та ( 32767 - 2048 = 30719
)
php_admin_value error_reporting
для цього працював (у vhost config).
Значення за замовчуванням error_reporting прапора є E_ALL & ~ E_NOTICE , якщо не встановлено в php.ini. Але в деяких установках (зокрема установках, орієнтованих на середовища розробки) є E_ALL | E_STRICT встановлюється як значення цього прапора (це рекомендоване значення під час розробки ). У деяких випадках, особливо коли ви хочете запустити деякі проекти з відкритим кодом, розроблені до епохи PHP 5.3 та ще не оновлені найкращими методами, визначеними PHP 5.3, у вашому середовищі розробки, ймовірно, ви зможете отримати деякі такі повідомлення, як ви отримуєте. Найкращий спосіб вирішити цю ситуацію - це встановити лише E_ALL як значення позначки error_reporting , або вphp.ini або в коді (ймовірно, в передньому контролері, як index.php в web-root, наступним чином:
if(defined('E_STRICT')){
error_reporting(E_ALL);
}
WordPress
Якщо ви працюєте в середовищі wordpress, Wordpress встановлює рівень помилки у файлі wp-include / load.php у функції wp_debug_mode()
. Тож вам доведеться змінити рівень ПІСЛЯ error_reporting()
виклику цієї функції (у файлі, який не перевіряється в git, тому це лише розробка), або або змінити безпосередньо виклик
Я не побачив відповіді, яка є чистою і підходить для готового до виробництва програмного забезпечення, тож ось це:
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();
/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting & ~E_STRICT);
// code that should not emit E_STRICT messages goes here
/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
для виробництва. Зауважте, що вони пропонують вам відключити суворі стандарти.