WP_DEBUG n'est pas défini, mais je reçois toujours des avertissements

14

Si WP_DEBUG n'est pas défini, si je comprends bien, vous ne devriez jamais voir d'avertissement. Mais sur certains sites sur certains serveurs, j'en vois encore quelques-uns. Pas tous les avertissements qui seraient affichés si WP_DEBUG était défini, mais quelques-uns.

J'ai essayé de changer le niveau d'erreur dans php.ini, mais cela semble n'avoir aucun effet sur l'apparition ou non des avertissements, mais ils apparaissent en quantités différentes sur différents serveurs (c'est-à-dire aucun avertissement sur le développement, un avertissement sur la mise en scène et quelques avertissements supplémentaires sur la production).

tomdxw
la source
S'agit-il vraiment d'avertissements ou d'erreurs fatales?
TheDeadMedic
J'ai eu exactement le même problème, c'était des AVERTISSEMENTS de GravityForms dans mon cas, la sortie d'avertissement était - Avertissement: le commutateur de ciblage "continuer" est équivalent à "casser". Vouliez-vous utiliser "continue 2"? dans /plugins/gravityforms/common.php - la réponse de Logic Digger ci-dessous a fonctionné copier / coller pour que je corrige ce premier essai, merci.
OG Sean

Réponses:

8

WP_DEBUG n'a aucun impact sur la sortie d'erreur PHP. En plus du paramètre error_reporting, définissez display_errors = 0 dans votre fichier php.ini. Il est activé par défaut pour le développement. Mais vous voudrez le désactiver sur les serveurs de production.

Dave Konopka
la source
Pour paraphraser wp-includes / load.php: if (WP_DEBUG) error_reporting (E_ALL). Mais il semble que plusieurs plugins jouent avec error_reporting et display_errors alors qu'ils ne devraient probablement pas l'être.
tomdxw
1
Ah - vous avez raison, display_errors était réglé sur On dans mon php.ini. J'ai juste supposé que WP_DEBUG s'était occupé de toutes les erreurs. Je vous remercie.
tomdxw
22

Remplacer

define('WP_DEBUG', false);

avec ça:

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);
RAM
la source
4
Veuillez ajouter une explication à votre réponse.
fuxia
Les erreurs à l'écran sont probablement éteintes, mais vous pouvez les voir sur votre serveur dans le journal des erreurs
user2060451
4

Il est également possible que cette ligne soit déjà définie sur false. Dans ce cas, vous verrez le code suivant:

define('WP_DEBUG', false);

Dans les deux cas, vous devez remplacer cette ligne par le code suivant:

ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);

N'oubliez pas de sauvegarder vos modifications et de télécharger votre fichier wp-config.php sur le serveur.

Digger digger
la source
1
Merci, cela a fonctionné pour masquer les avertissements sur le front-end pour moi. WP_DEBUG était déjà défini sur false.
OG Sean
1

Essayez de désactiver / supprimer tous les avertissements / avis d'erreur dans votre wp-config.php(en haut). Quoi qu'il en soit: les erreurs ne sont rien de mal. Ils vous donnent la possibilité de corriger votre code.

kaiser
la source
Je pense que ce sont les plugins d'autres personnes qui tripotent error_reporting qui ont causé cela.
tomdxw
1

Pour les environnements WordPress, il n'y a généralement aucune raison d'utiliser ini_setcar c'est ce que les constantes définies fournies par WordPress Core réalisent déjà. La façon dont PHP fonctionne est que certains paramètres peuvent être remplacés dans votre CMS (WordPress), dans des scripts individuels, et même par utilisateur ou par répertoire (à la grande frustration des hébergeurs et des agences Web).

Pour désactiver les erreurs d'affichage sur la page dans WordPress, le seul paramètre dont vous avez vraiment besoin est:

define('WP_DEBUG', false);

... car quand WP_DEBUGest désactivé, les sous-options sont alors inactives:

define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);

Gardez à l'esprit que l' WP_DEBUG_LOGoption déroutante se réfère uniquement à la création de debug.logdans le répertoire wp-contentet n'affecte pas les autres paramètres de journalisation, etc.

Encore une fois, les paramètres de WordPress peuvent remplacer les paramètres PHP par défaut, donc vos paramètres PHP n'ont pas autant d'importance que d'avoir des paramètres corrects dans votre wp-config.phpfichier, qui se charge avant les autres composants WP.

Cela dit, c'est une bonne idée d'implémenter les paramètres par défaut comme ci-dessous en production:

error_reporting = E_ERROR | E_WARNING | E_PARSE
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/www/logs/error.log
log_errors_max_len = 1024
ignore_repeated_errors = On
ignore_repeated_source = Off
report_memleaks = On
xmlrpc_errors = 0
html_errors = Off

Pour un exemple complet, reportez-vous à notre fichier SlickStack php.ini optimisé pour Nginx et PHP-FPM.

Dans un cas, après des heures de recherche, nous avons réalisé qu'un plugin (ou thème) remplaçait les différents paramètres de gestion des erreurs précédemment définis dans php.iniet wp-config.php. La seule façon d'empêcher cela est de supprimer le plugin ou le thème WordPress qui essaie de "pirater" vos paramètres PHP, ou de leur dire de le supprimer parce que c'est une très mauvaise pratique pour les extensions de remplacer les options de débogage de votre CMS.

Dans SlickStack, nous avons créé un script Bash qui "marque" les lignes ini_setet les error_reportingfichiers PHP dans les répertoires /themes/et /plugins/en mettant en évidence de telles instances à l'aide d'un plug- in MU (script PHP) qui affiche une liste de ces "hacks" dans le tableau de bord d'administration WP.

Jesse Nickles
la source