WP_DEBUG non è impostato, ma sto ancora ricevendo avvisi


14

Se WP_DEBUG non è impostato, come ho capito, non dovresti mai vedere avvisi. Ma su alcuni siti su alcuni server, ne vedo ancora alcuni. Non tutti gli avvisi che verrebbero visualizzati se fosse impostato WP_DEBUG, ma alcuni selezionati.

Ho provato a cambiare il livello di errore in php.ini, ma questo sembra non avere alcun effetto sulla visualizzazione o meno degli avvisi, ma appaiono in quantità diverse su server diversi (ovvero nessun avviso sullo sviluppo, un avviso sulla gestione temporanea e qualche avvertimento in più sulla produzione).


Sono sicuramente avvertimenti o errori fatali?
TheDeadMedic,

Ho avuto lo stesso identico problema, sono state le AVVERTENZE di GravityForms nel mio caso l'output di avviso era: Avviso: l'interruttore di targeting "continua" equivale a "interruzione". Intendevi usare "continue 2"? in /plugins/gravityforms/common.php - La risposta di Digic Digger di seguito ha funzionato copia / incolla per me per risolvere questo primo tentativo, grazie.
OG Sean

Risposte:


8

WP_DEBUG non ha alcun impatto sull'output dell'errore PHP. Oltre all'impostazione error_reporting, imposta display_errors = 0 nel tuo file php.ini. È abilitato per impostazione predefinita per lo sviluppo. Ma lo vorrai sui server di produzione.


Per parafrasare wp-Includes / load.php: if (WP_DEBUG) error_reporting (E_ALL). Ma sembra che diversi plugin stiano giocherellando con error_reporting e display_errors quando probabilmente non dovrebbero esserlo.
tomdxw,

1
Ah - hai ragione, display_errors era impostato su On nel mio php.ini. Ho appena pensato che WP_DEBUG si sia preso cura di tutti gli errori. Grazie.
tomdxw,

22

Sostituire

define('WP_DEBUG', false);

con questo:

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);

4
Aggiungi una spiegazione alla tua risposta.
fuxia

Probabilmente gli errori sullo schermo sono disattivati, ma puoi vederli nel tuo server nel registro degli errori
user2060451

4

È anche possibile che questa riga sia già impostata su false. In tal caso, vedrai il seguente codice:

define('WP_DEBUG', false);

In entrambi i casi, è necessario sostituire questa riga con il seguente codice:

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

Non dimenticare di salvare le modifiche e caricare il file wp-config.php sul server.


1
Grazie, ha funzionato per nascondere avvisi sul front-end per me. WP_DEBUG era già impostato su false.
OG Sean

1

Prova a disabilitare / eliminare tutti gli avvisi / avvisi di errore nel tuo wp-config.php(in alto). Comunque: gli errori non sono niente male. Ti danno la possibilità di correggere il tuo codice.


Penso che siano stati i plugin di altre persone a giocherellare con la segnalazione di errori che hanno causato questo.
tomdxw,

1

Per gli ambienti WordPress, di solito non c'è motivo di utilizzare ini_setperché è quello che le costanti definite fornite da WordPress Core stanno già raggiungendo. Il modo in cui funziona PHP è che alcune impostazioni possono essere sovrascritte nel tuo CMS (WordPress), all'interno di singoli script e persino su base per utente o per directory (con grande frustrazione degli host e delle agenzie web).

Per disabilitare la visualizzazione degli errori sulla pagina in WordPress, l'unica impostazione di cui hai veramente bisogno è:

define('WP_DEBUG', false);

... perché quando WP_DEBUGè disabilitato, le opzioni secondarie sono quindi inattive:

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

Tenere presente che l' WP_DEBUG_LOGopzione confusa si riferisce solo alla creazione debug.logall'interno della directory wp-contente non influisce su altre impostazioni di registrazione, ecc.

Ancora una volta, le impostazioni in WordPress possono sovrascrivere le impostazioni PHP predefinite, quindi le tue impostazioni PHP non contano tanto quanto avere le impostazioni corrette nel tuo wp-config.phpfile, che si carica prima di altri componenti WP.

Detto questo, è una buona idea implementare le impostazioni predefinite come di seguito in produzione:

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

Per un esempio completo, consultare il nostro file php.ini SlickStack ottimizzato per Nginx e PHP-FPM.

In un caso, dopo ore di ricerca, ci siamo resi conto che un plugin (o tema) stava scavalcando le varie impostazioni di gestione degli errori precedentemente impostate in php.inie wp-config.php. L'unico modo per impedirlo è rimuovere il plug-in o il tema di WordPress che sta cercando di "hackerare" le impostazioni di PHP o dire loro di rimuoverlo perché è una pessima pratica per le estensioni ignorare le opzioni di debug del tuo CMS.

In SlickStack, abbiamo creato uno script Bash che "contrassegna" qualsiasi ini_sete error_reportinglinea dai file PHP nelle directory /themes/e /plugins/evidenziando tali istanze utilizzando un plug-in MU (script PHP) che visualizza un elenco di tali "hack" nella dashboard di amministrazione di WP.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.