Disabilitare gli standard rigorosi in PHP 5.4


95

Attualmente sto eseguendo un sito su php 5.4, prima di questo stavo eseguendo il mio sito su 5.3.8. Sfortunatamente, php 5.4 combina E_ALLe E_STRICT, il che significa che la mia impostazione precedente per error_reportingnon funziona ora. Il mio valore precedente era E_ALL & ~E_NOTICE & ~E_STRICTDevo solo abilitare i valori uno alla volta?

Ho troppi errori e i file contengono troppo codice da correggere.


11
Consiglio ... Correggere il codice oi bug sarebbero migliorati e più difficile da eseguire il debug
Baba

7
s / Purtroppo / Fortunatamente
NikiC

96
Grazie per il consiglio, tuttavia mi mancano le conoscenze necessarie per riscrivere l'intero plugin jfusion phpbb3. grazie per essere condiscendente però.
icomrade

12
Sono d'accordo con i nostri amici che dovresti provare a correggere gli errori, potrebbero venire a morderti la caviglia, inoltre nascondere tutti gli errori rende difficile il debug. Ma non penso nemmeno che sia giusto giudicare il poster di questa domanda solitaria, se non hai mai dovuto scrivere qualche lavoro orribile in giro perché il tuo cliente è al telefono per dire ai tuoi figli non nati che non hai lavorato con IT abbastanza a lungo
Jonathan dos Santos

7
Questa è una domanda perfettamente ragionevole, e sì @icomrade - hai ragione sulla condiscendenza e sul sarcasmo qui. È uno dei tratti meno attraenti di StackOverflow. Detto questo, ti consiglio di affrontare almeno alcuni degli avvertimenti che ricevi, anche se non puoi farli tutti.
halfer

Risposte:


139

Come hanno affermato i commentatori, l' opzione migliore è correggere gli errori, ma con un tempo o una conoscenza limitati, non è sempre possibile. Nel tuo php.ini cambia

error_reporting = E_ALL

per

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Se non hai accesso a php.ini, puoi potenzialmente inserirlo nel tuo file .htaccess:

php_value error_reporting 30711

Questo è il valore E_ALL (32767) e la rimozione dei valori E_STRICT (2048) e E_NOTICE (8).

Se non hai accesso al file .htaccess o non è abilitato, probabilmente dovrai metterlo all'inizio della sezione PHP di qualsiasi script che viene caricato da una chiamata del browser:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Uno di questi dovrebbe aiutarti a essere in grado di utilizzare il software. Gli avvisi e le cose rigorose sono indicatori di problemi o potenziali problemi e potresti scoprire che parte del codice non funziona correttamente in PHP 5.4.


11
Sto usando php 5.4.5 e ho provato tutto quanto sopra ma non sono riuscito a disabilitare le notifiche rigorose :( qualche altra idea?
ro ko

2
Potresti provare a mettere & ~ E_DEPRECATED insieme alle altre parti in error_reporting (). Quali messaggi stai vedendo?
David Stockton

4
@roko È possibile che il tuo codice lo sovrascriva da qualche parte? Vedevo ancora errori severi dopo averlo disabilitato in php.ini, poi mi sono reso conto che era solo per alcuni siti Web, quelli che utilizzano Drupal, dove il valore era impostato nel codice
andrewtweber

1
@AndrewSpear È strano. In teoria, l'impostazione error_reporting dovrebbe influenzare gli errori che vengono mostrati ovunque siano mostrati. L'impostazione display_errors dovrebbe influenzare se si ottengono o meno gli errori nell'output (nelle pagine PHP) e error_log influenzerebbe il punto in cui gli errori vengono scritti nel log. Se display_errors è attivo, dovresti vedere gli stessi errori sullo schermo come nel registro.
David Stockton

4
+1 per rispondere a una semplice domanda con una risposta semplice senza trasformarsi in uno StackOverflow Smuglord ™.
Joshua Pech

2

.htaccess php_value funziona solo se utilizzi PHP Server API come modulo del server Web Apache. Usa la sintassi IfModule:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Se usi PHP Server API CGI / FastCGI usa

ini_set('error_reporting', 30711);

o

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

nel codice PHP o nei file di configurazione PHP .user.ini | modifica php.ini:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

sul tuo host virtuale, a livello di server.


1

Ha funzionato per me, quando ho impostato error_reporting in due posti contemporaneamente

da qualche parte nel codice PHP

ini_set('error_reporting', 30711);


e nel file .htaccess

php_value error_reporting 30711

L'unica cosa che ha funzionato per me senza avere accesso a php.ini, un'altra delle precedenti non funzionerebbe da sola, ha restituito solo un errore 500. Entrambi insieme baby !!!
Jamie Hutber

1

Se devi disabilitare anche E_DEPRACATED, usa:

php_value error_reporting 22527

Nel mio caso CMS Made Simple si lamentava "E_STRICT è abilitato in error_reporting" così come "E_DEPRECATED è abilitato". L'aggiunta di quella riga a .htaccess ha risolto entrambi gli errori di configurazione.


0

Attenzione, potresti dover riavviare LAMP, Apache o qualunque cosa tu stia utilizzando per fare in modo che abbia effetto. Ci siamo scervellati per un po 'su questo, sembrava non avere alcun effetto fino al riavvio dei servizi, presumibilmente perché il sito Web era in cache.


No. È perché Apache ha bisogno di ricaricare le impostazioni per PHP. Questo è AFAIK fatto solo all'avvio del servizio.
svin83
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.