Come tacere gli errori PHP?


32

C'è un modo per mettere a tacere tutti gli errori, gli avvisi e gli avvisi di PHP in Drupal? Sono utili sul sito di sviluppo ma rappresentano un grosso rischio per la sicurezza e rendono il sito un aspetto negativo in diretta.

So che su Drupal 6 la pagina su admin / settings / segnalazione errori può impedire a Drupal di scrivere errori sullo schermo, ma dove posso trovarlo in Drupal 7? Sembra che manchi.


3
Si noti, tuttavia, che gli errori hanno un ruolo molto importante: indicano che qualcosa non va. Sorprendendolo, non si risolve il problema di fondo. Questo è anche chiamato "Metodo russo": quando la luce di allarme in una centrale nucleare inizia a lampeggiare, basta rimuovere la lampadina. La spia di allarme non lampeggia più; nessun problema.
Berkes,

Divertente :). Ma sopprimo solo l'errore sul sito di produzione.
drupal_stuff_alter

Drupal ha la possibilità di decidere quali errori devono essere visualizzati; gli errori non visualizzati vengono comunque registrati nel database e mostrati in admin / reports / dblog.
kiamlaluno

@kiamlaluno, in una produzione che va abbastanza bene (ma presentare un errore per cui un pagamento fallito è sempre meglio quindi lasciare il tuo cliente nell'incertezza). Ma nello sviluppo e nei test la mia esperienza è che gli errori inseriti in dblog sono trascurati. I siti di Drupals con centinaia di avvisi e avvisi all'ora registrati lì, non fanno eccezione. E vere eccezioni ed errori si perdono nel rumore. La cosa migliore è spingere ogni singolo avviso in faccia allo sviluppatore.
Berkes,

Giusto, ma l'OP sembra essere interessato a nascondere quegli errori in un sito di produzione. (Vedi "Sono utili sul sito di sviluppo ma sono un grosso rischio per la sicurezza e rendono il sito un aspetto negativo in diretta.")
kiamlaluno

Risposte:


29

Il percorso cambia, come in Drupal 7 la stessa pagina che vedresti prima su admin / settings / error-reporting è ora su admin / config / development / logging.

immagine dello schermo


1
Per qualche motivo, non sono in grado di farlo. Al clic su Salva la mia selezione viene ripristinata. C'è un modo per cambiarlo manualmente nel database o qualcosa del genere ??
Niranjan N Raju,

17

Come suggerito, in Administration » Configuration » Development(at /admin/config/development/logging) puoi trovare l'impostazione per disabilitare la visualizzazione dei messaggi di errore, ma non disabiliterà completamente errori / avvisi.

È perché Drupal 7 applica E_ALL, quindi sono ancora scritti su syslog e puoi vederli nei registri recenti che incidono sulle prestazioni del tuo sito web.

Per disabilitare completamente le notifiche, dovrai aggiungere la seguente riga nel tuo file settings.phpo php.ini:

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

Mostra tutti gli errori, ad eccezione di avvisi e avvertenze sugli standard di codifica.

Per mettere a tacere tutti gli errori PHP, che non è raccomandato, puoi provare ad aggiungere il tuo file delle impostazioni:

error_reporting(0); // Disable all errors.

Vedere: error_reporting()


Codice core Drupal 7 responsabile per la E_ALLregistrazione (file:) includes/bootstrap.inc:

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

Guarda anche:


4

Una cosa che nessuno ha detto che può essere utile per le persone è che Drupal 7 ignora tutti i livelli di segnalazione degli errori del sistema locale. Quindi non puoi usare .htaccess o persino php.ini per impostare i livelli di segnalazione errori php in Drupal.

C'è una patch proposta per questo in D8, ma attualmente in D7 sei limitato alle 3 maschere di errore - tutte, nessuna, o errori e avvertenze - che sono impostate sulla pagina di amministrazione indicata da kiamlaluno.


3

Le impostazioni sono sempre in admin / config / development / logging :)


Molte grazie! Voglio ancora avere le notifiche verdi in vita. Spero che non spariscano.
drupal_stuff_alter il

2

Non sono sicuro del perché il metodo Drush non sia documentato, ma ho nel mio script di build:

drush vset error_level 0

... che salva i messaggi di errore nel registro ma non li mostra sullo schermo.


1

Potrebbe essere necessario aggiungere preventivi alla soluzione kenorb pubblicata sopra:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

Questo è sbagliato: quelle sono costanti, non dovrebbero essere citate. error_reporting è un valore intero composto dalle costanti intere ORed insieme. Non è un'impostazione di stringa composta da nomi costanti come qui.
datashaman

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.