2015-06-01 5 views
8

Sono entrato in questa pazza compagnia come amministratore del sito. Ora ho apportato alcune modifiche alle mie configurazioni db che hanno influito sull'esecuzione degli script PHP.Come vedere gli errori soppressi da '@'?

La parte sconosciuta è che gli script PHP muoiono. Non provocano errori. Quando sono entrato negli script mi ​​sono reso conto che hanno usato la direttiva di soppressione degli errori @. Ora l'intero codebase è un milione di righe distribuite su migliaia di file e non si vuole eseguire qualcosa come sed per sostituire '@'.

Ma "@" ha reso impossibile il debugging. È come se gli sviluppatori stessero chiudendo gli occhi e trovassero che la visione oscura stava dicendo la sua notte.

c'è un modo per annullare la soppressione errore fatto da '@' e lasciare che la direttiva log php gestirlo. Toccando il codice base non è un'opzione. Non vedo l'ora di trovare un modo per farlo modificando la configurazione del php o aggiungendo poche righe nel file di bootstrap.

+0

Cosa c'è di sbagliato con la ricerca e la sostituzione? sicuramente più semplice dell'aggiornamento del motore PHP. –

+0

Sostituendo semplicemente '@' con '' lo si sostituirebbe anche nei punti in cui non è utilizzato per la soppressione. Dì un file contenente l'e-mail id o il codice regex verificandolo. – codersofthedark

+0

in breve, non sostituirlo in stringhe e commenti. fattibile .. sopravvalutiamo .. un'ora? –

risposta

5

Se si dispone di Xdebug installato e abilitato (in fase di sviluppo, si dovrebbe), è possibile impostare l'opzione di configurazione xdebug.scream, che disabilita @ -operator.

In alternativa, il scream PECL extension disabilita anche l'operatore @ (e questo è tutto ciò che fa).

Fondamentalmente si installa l'estensione quindi impostare le scream.enabled ini impostazione su true/a.

4

errori tenui sono ancora visibili per il gestore installato tramite set_error_handler. Quindi, si può semplicemente aggiungere qualcosa di simile al file di bootstrap:

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    echo "$errstr at $errfile($errline)\n"; 
}); 

o, meglio,

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 1, $errfile, $errline); 
}); 

che sarebbe anche visualizzare lo stack.