2010-09-01 20 views
52

Eventuali duplicati:
Reference - What does this symbol mean in PHP?Cosa significa @ in PHP?

Mi chiedevo che cosa @ significa in linguaggio PHP. Ho visto persone che usano

$connect = @mysql_query('sql query here'); 

Non so perché. Qualcuno potrebbe spiegarlo per me?

+6

è una brutta, brutta cosa. Non usarlo mai ed eliminare tutti quelli che trovi. –

+5

Non dire "mai". Posso pensare ad un particolare esempio con ldap quando si testano le credenziali di un utente. Se le credenziali falliscono, viene stampato un errore e non può essere intrappolato con un try/catch. L'unica cosa che puoi fare è testare il risultato. Mentre in genere sono d'accordo con te, ci sono delle eccezioni. – Brad

risposta

52

Il @ operator dice a PHP per sopprimere i messaggi di errore, in modo che essi non verranno mostrati.

Ad esempio, utilizzando:

$result = mysql_query("this is an invalid query"); 

si tradurrebbe in un avvertimento viene mostrato, che indica che la query MySQL non è valido, mentre

$result = @mysql_query("this is still an invalid query"); 

no.

Si noti, tuttavia, che si tratta di una pratica di programmazione pessima in quanto non fa scomparire l'errore, ma li nasconde e rende il debug molto più difficile dal momento che non si riesce a vedere cosa c'è di veramente sbagliato nel codice .

Invece di usare @, è necessario disattivare error_reporting e display_errors solo display_errors in php.ini

+0

Buon uso di esempi reali, grazie per questa risposta. – NateDSaint

+0

risposta accettata per spiegazione molto dettagliata ... – FlyingCat

+11

Una nota. ** Never ** disabilita 'error_reporting'. Prendi questa impostazione sbagliata. display_errors è uno di cui hai bisogno in questo caso. –

1

Il @ è un modo per dire che non si desidera stampare i messaggi di errore. È una cattiva pratica perché potresti avere un errore e non vederlo mai perché lo hai semplicemente "nascosto".

PHP supporta un operatore di controllo degli errori: il simbolo at (@). Se anteposto a un'espressione in PHP, tutti i messaggi di errore che potrebbero essere generati da quell'espressione verranno ignorati.


Risorse:

0

@ Operatore = Indica che, se non v'è alcun tipo di errore si verifica, allora non visualizzare il messaggio nel browser dell'utente . Ci sono persone che lo testano e non hanno visto la differenza, anche se hanno messo @ o non vedono ancora alcun errore nel browser, beh solo per aggiungere, il motivo per cui questo accade è dovuto all'impostazione nel il file php.ini per l'output degli errori è disattivato.

Diverse società di hosting hanno impostazioni diverse in modo da assicurarsi che non si vogliano vedere brutti errori di script per gli utenti o gli hacker (per dare un indizio per infiltrarsi nel tuo sito) puoi sempre usare l'operatore @ .

Spero che questo aiuto.