2011-09-08 10 views
9

Ho un'app legacy che richiede register_globals e magic_quotes_gpc da abilitare. Ho il mio error_reporting impostato su E_ALL & ~E_DEPRECATED perché voglio ancora vedere eventuali avvisi.Messaggi di deprecazione PHP 5.3 visualizzati come avvertenze

Quando eseguo il PHP CLI ottengo il seguente

$ php -d "error_reporting=E_ALL & ~E_DEPRECATED" -v 
PHP Warning: Directive 'register_globals' is deprecated in PHP 5.3 and greater in Unknown on line 0 
PHP Warning: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0 
PHP 5.3.3 (cli) (built: Mar 30 2011 13:51:41) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans 

Perché è mostrando i messaggi di deprecazione quali avvertenze? Non dovrebbero essere nel livello E_DEPRECATED?

Sembra che devo per non mostrare gli avvisi di farli andare via

$ php -d "error_reporting=E_ALL & ~E_WARNING" -v 
PHP 5.3.3 (cli) (built: Mar 30 2011 13:51:41) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 
    with Xdebug v2.1.2, Copyright (c) 2002-2011, by Derick Rethans 

potevo cambiare il mio error_reporting-E_ALL & ~E_DEPRECATED & ~E_WARNING ma poi non avrebbe mostrato le avvertenze per il mio webapp. Eventuali suggerimenti? Devo utilizzare uno php.ini separato per la CLI?

+0

È programmato come E_WARNING. E questo è quello. (A proposito, entrambi gli avvertimenti sarebbero facili da risolvere.) – mario

+1

Dovresti disattivare entrambe le direttive. Sono cattive idee cattive. –

+0

@ Ondřej Mirtes ha appena citato l'OP, perché sembra che tu abbia perso la prima riga: "Ho un'app legacy che richiede register_globals e magic_quotes_gpc per essere abilitato." –

risposta

0

È considerata buona pratica non utilizzare neanche. Sono E_WARNING s perché quelli sono il tipo di errori che gli sviluppatori hanno scelto di attivare (è arbitrario utilizzarne uno rispetto a un altro a quel livello).

Si consiglia vivamente di assicurarsi che tali funzionalità siano disattivate nella configurazione o che, se non è possibile evitarlo, disattivare questi tipi di avvisi nella configurazione. Altrimenti rischi di rovinare una richiesta AJAX. Dobbiamo tutti farcela.

0

Potrebbe essere un po 'di fortuna spegnere lo display of startup errors. Gli errori dovrebbero comunque essere registrati nel log degli errori, ma non verranno visualizzati nell'output dell'applicazione.

+0

Ho 'display_startup_errors = Off' e ricevo comunque gli avvertimenti. – ejunker

0

si potrebbe provare a registrare il gestore degli errori con

set_error_handler("myFunc"); 

e myFunc è qualcosa di simile:

myFunc($errno,$errstr) { 
    return strpos($errstr,"register_globals")===false ? false : true; 
} 

così, se la stringa "register_globals" non si trova, func restituisce false e standard di gestione degli errori inizia, altrimenti restituisce solo true e non succede nulla.

1

LMGTFY

la migliore risposta

[2009-09-07 08:42 GMT] [email protected] Sì. Non è E_DEPRECATED, è E_WARNING e non cambierà.

[2010-03-23 ​​14:26 UTC] [email protected] aks in esoft dot dk> Se la documentazione effettivamente lo dice, quindi segnalarlo come un problema separato invece di urlare un rapporto già chiuso.

Sembra che tu debba accettare il modo di comportarsi.
Le modifiche si applicano solo a v6

2

Modificare error_reporting a E_ALL & ~E_DEPRECATED & ~E_WARNING.

Poi, all'inizio del vostro set di codici:

error_reporting(E_ALL | E_STRICT); 

PHP controlla iniziali sono passati e ora avete il vostro ambiente errori segnalati completa. :)