2010-01-01 16 views

risposta

236

È necessario correggere qualsiasi problema che causa l'avviso, ma è possibile controllare la visibilità degli errori con error_reporting. Per saltare i messaggi di avviso, si potrebbe usare qualcosa come:

error_reporting(E_ERROR | E_PARSE); 
+32

'E_ALL^​​E_WARNING', abilitando tutte le segnalazioni di errori oltre agli avvertimenti, sembra una scelta migliore di argomento per' error_reporting'. –

+0

in genere sono d'accordo, nel mio caso la generazione del messaggio di avviso era comportamento previsto perché faceva parte dei miei test unitari. – pgee70

5

Si potrebbe sopprimere l'avviso utilizzando error_reporting ma il modo migliore è quello di correggere lo script in primo luogo.

Se non sai come, modifica la tua domanda e mostraci la riga in questione e l'avviso che viene visualizzato.

+1

risolti senza bisogno di script di ho usato error_reporting (0); – Alireza

+7

Safaali, dovresti risolvere i problemi, non ignorare poi. – Sampson

+2

Safaali, visto che hai un certo interesse per PHP, fai un favore a te stesso e cerca di risolvere quel copione. –

79

Si può mettere un @ di fronte al vostro chiamata di funzione per eliminare tutti i messaggi di errore.

@yourFunctionHere(); 
+3

Questo nasconde l'errore, sta ancora accadendo. Gli errori fanno rallentare PHP, quindi è meglio correggere l'errore se possibile. L'uso di @ rallenta persino il codice quando non c'è un errore. http://vega.rd.no/articles/php-performance-error-suppression – dprevite

+29

A volte (sfortunatamente) davvero non hai scelta. Ad esempio, la funzione PHP parse_url() genera Warnings per gli URL "severamente malformati" - che è probabilmente un bug poiché la funzione restituisce false in questo caso. Quindi è necessario tollerare questi avvertimenti PHP nell'output del programma (potrebbe non essere accettabile per le applicazioni parser/validator), sopprimere gli avvertimenti in qualche modo o aggirare il comportamento di PHP rotto scrivendo il proprio parser/validatore per gli URL. In questo caso, scelgo la @. – Peter

+1

IMPORTANTE: utilizzare questo metodo iff (1) non è possibile risolvere il problema che genera l'avviso né (2) nascondere gli avvisi dagli utenti finali tramite php error_reporting ... Nascondere gli avvisi dai propri sviluppatori NON è una soluzione. –

28

siano soppressi gli avvisi, lasciando tutti gli altri la segnalazione degli errori abilitati:

error_reporting(E_ALL^E_WARNING); 
9

Non esattamente rispondere alla domanda, ma penso che questo sia un compromesso meglio in alcune situazioni:

Ho avuto un messaggio di avviso come risultato di un'istruzione printf() in una libreria di terze parti. Sapevo esattamente quale fosse la causa: un intervento temporaneo mentre la terza parte risolveva il loro codice. Sono d'accordo sul fatto che gli avvertimenti non dovrebbero essere soppressi, ma non ho potuto dimostrare il mio lavoro a un cliente con il messaggio di avviso che appare sullo schermo. La mia soluzione:

printf('<div style="display:none">'); 
    ...Third-party stuff here... 
printf('</div>'); 

L'avviso era ancora nella pagina di origine come promemoria per me, ma invisibile al client.

+4

Personalmente, userei ['ob_start()'] (http://php.net/manual/en/function.ob-start.php) e ['ob_end_clean()'] (http: // php. net/manual/en/function.ob-end-clean.php). In questo modo le cose non vengono nemmeno inviate al browser (cosa che fa qui). – h2ooooooo

+6

Ecco perché ho incluso "alcune situazioni", "gli avvisi non dovrebbero essere soppressi" e "promemoria per me". – DaveWalley

+1

Prima di votarmi di più, per favore, leggi la mia risposta. Nota "terze parti", "compromesso" e il commento sopra. Ho aggiunto questa risposta nel caso in cui qualcun altro si trovasse nella stessa situazione in cui mi trovavo, e in quella situazione specifica, questo mi ha salvato mentre tutte le altre risposte non sarebbero state altrettanto buone. La prossima volta penserò due volte ad essere utile. – DaveWalley

15

Se non si desidera visualizzare gli avvisi e gli errori usano

// Turn off all error reporting 
error_reporting(0); 

Error Reporting - PHP Manual

4

Penso che soluzione migliore è la configurazione di .htaccess In questo modo non dovete modificare il codice di applicazione. Qui ci sono le direttive per Apache2

php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
4

nel core di PHP per nascondere messaggio di avviso impostare error_reporting (0) in cima alla comuni includono file o singoli file.

In Wordpress hide Warnings and Notices aggiuntivo seguente codice nel file wp-config.php

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

Se si desidera eliminare gli avvertimenti e alcuni altri tipi di errore (ad esempio, comunicazioni) durante la visualizzazione di tutti gli altri errori, è possibile Non:

error_reporting(E_ALL & ~E_WARNING & ~E_NOTICE); 
0

lo faccio come questo nel mio php.ini:

error_reporting = E_ALL & ~ E_WARNING & ~ E_NOTICE & ~ E_STRICT & ~ E_DEPRECATED

che registra solo gli errori fatali e nessun avviso

+0

Se questa non è una risposta, dovrebbe essere pubblicata come commento o un'altra domanda – Robert

+0

Robert. Questa è una risposta. – navid

Problemi correlati