PHP 5 disabilita l'errore standard rigoroso


175

Devo impostare il mio script PHP in alto per disabilitare la segnalazione degli errori per standard rigorosi.

Qualcuno può aiutare?


8
@ 451F: Penso che le parole chiave qui siano "standard rigorosi". Non conosco le versioni precedenti ma con PHP 5.4.0 si consiglia di impostare la segnalazione degli errori E_ALL & ~E_DEPRECATED & ~E_STRICTper la produzione. Si noti che suggeriscono di disabilitare standard rigorosi.
Codice falso Monkey Rashid

Risposte:


185

Vuoi disabilitare la segnalazione degli errori o semplicemente impedire all'utente di vederlo? Di solito è una buona idea registrare gli errori, anche in un sito di produzione.

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

Verranno registrati nel registro di sistema standard o utilizzeranno la error_logdirettiva per specificare esattamente dove si desidera che vadano gli errori.


11
Giusto per dichiarare esplicitamente l'ovvio: ovviamente puoi anche impostarli nel tuo php.inifile, ad esempio se non puoi modificare il codice PHP.
sschuberth,

1
Anche la registrazione di errori severi nella produzione è una cattiva pratica. Poiché riempirai i tuoi registri con avvisi che probabilmente non contano, causando uno o entrambi i seguenti problemi: serverAdmin mancherà / ignorerà gli errori e la directory dei registri consumerà tutto lo spazio del server a un certo punto.
Lance,

4
Questo non funziona per me - ho dovuto usare E_ALL & ~ E_STRICT dal commento
Fash

1
come funziona insieme a quanto segue che ho trovato nel mio php.ini log_errors = On Vs ini_set ('display_errors', '0'); L'ultimo set vince?
sbarcò il

@nate quando pubblichi un codice per favore dicci dove possiamo incollarlo. Non so dove metterlo: in php.inio .htaccesso da qualche parte nel mio codice PHP.
Даниил Пронин,

89

Per nessun errore

error_reporting(0);

o semplicemente non severo

error_reporting(E_ALL ^ E_STRICT);

e se mai vuoi visualizzare nuovamente tutti gli errori, usa

error_reporting(-1);


56
+1: credo che ^sia buono solo per omettere un tipo di errore. Se si desidera disattivare altri tipi, è necessario utilizzare il E_ALL & ~E_DEPRECATED & ~E_STRICTformato. O forse il (E_ALL & ~(E_DEPRECATED | E_STRICT))formato.
Codice falso Monkey Rashid

10
Nota: E_STRICT fa parte di E_ALL solo dal php 5.4
Fred Haslam,

@FakeCodeMonkeyRashid Mi chiedo perché sia? probabilmente perché allora l'ordine di evacuazione è importante?
codifica il

Sopprimere la segnalazione di errori STRICT in PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Sopprimere la segnalazione di errori ini_set('error_reporting', E_ALL^E_STRICT);
STRICT

Voglio sottolineare che usare ^("xor") anziché & ~("e non") è una cattiva idea ! ^dipende dal presupposto che, ad esempio, E_STRICT fa parte di E_ALL e ne farà sempre parte. Ciò è negativo perché E_ALL è cambiato in passato (E_STRICT non era passato, ma è ora da PHP 5.4). Se l'ipotesi non riesce un giorno, ^non solo rompere, ma effettivamente fare il contrario di quello che dovrebbe fare: Sarà consentirà E_STRICT a causa di come XOR ( ^funziona). & ~tuttavia disabiliterà sempre E_STRICT, indipendentemente dal valore corrente di E_ALL. Pertanto & ~dovrebbe essere usato.
Jay

31

Tutte le soluzioni sopra riportate sono corrette. Ma quando parliamo di una normale applicazione PHP, devono essere inclusi in ogni pagina richiesta. Un modo per risolvere questo problema è attraverso .htaccessla cartella principale. Solo per nascondere gli errori. [Inserisci una delle righe seguenti nel file]

php_flag display_errors off

O

php_value display_errors 0

Successivamente, per impostare la segnalazione degli errori

php_value error_reporting 30719

Se ti stai chiedendo come è 30719arrivato il valore , E_ALL (32767), E_STRICT (2048) sono in realtà costanti che contengono un valore numerico e ( 32767 - 2048 = 30719)


2
Grazie mille - questo ha fatto il trucco (soluzione .htaccess) in PHP 5.4.7 - nient'altro - anche modificando il .ini - stava facendo il trucco.

Ho usato php_admin_value error_reportingper farlo funzionare (nella configurazione di vhost).
Lou Terrailloune,

@Seza, Corretto Risolto.
Starx,

1
non si tratta della pagina, questo metodo è preferito perché la maggior parte degli errori E_STRICT sono in fase di compilazione e non possono essere sovrascritti in fase di esecuzione
AbiusX il

2
Ciao solo per renderlo un po 'più facile, per coloro che stanno usando Wamp, puoi disabilitare gli errori facendo clic su php> impostazioni php >> visualizza errori. Se è selezionato, deselezionalo.
Hemang Rami,

9

Il valore predefinito del flag error_reporting è E_ALL & ~ E_NOTICE se non impostato in php.ini. Ma in alcune installazioni (in particolare installazioni destinate ad ambienti di sviluppo) ha E_ALL | E_STRICT impostato come valore di questo flag (questo è il valore consigliato durante lo sviluppo ). In alcuni casi, specialmente quando vorrai eseguire alcuni progetti open source, sviluppati prima dell'era di PHP 5.3 e non ancora aggiornati con le migliori pratiche definite da PHP 5.3, nel tuo ambiente di sviluppo, probabilmente ti imbatterai in alcuni messaggi come te stai ricevendo. Il modo migliore per far fronte a questa situazione è impostare solo E_ALL come valore del flag error_reporting , sia inphp.ini o in codice (probabilmente in un front-controller come index.php in web-root come segue:

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}

8

Nel set php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

4

WordPress

Se lavori nell'ambiente wordpress, Wordpress imposta il livello di errore nel file wp-Includes / load.php in funzione wp_debug_mode(). Quindi devi cambiare il livello DOPO che questa funzione è stata chiamata (in un file non archiviato in git quindi è solo sviluppo), o modificare direttamente la error_reporting()chiamata


Questo è davvero utile, ho attivato la modalità debug per un'installazione di Wordpress e non mi ero reso conto di averlo fatto. Grazie per l'informazione!
Tim

2

Non ho visto una risposta pulita e adatta a software pronto per la produzione, quindi eccola qui:

/*
 * 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);
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.