2011-01-13 11 views
37

Nel mio dev env locale, utilizzo PHP versione 5.3.3-1ubuntu9.2.Che cosa è 22527 in error_reporting 22527 di phpinfo

Ora quando vedo error_reporting, il valore è 22527.

Che cosa è 22527?

Ho controllato http://www.php.net/manual/en/errorfunc.constants.php, ma non sono riuscito a trovare il numero.

Qualcuno potrebbe dirmi di cosa si tratta?

Devo cambiarlo in E_ALL | E_STRICT?

Grazie in anticipo.

+1

Un'alternativa è aprire il file 'php \ php.ini' direttamente e trovare per' error_reporting'. Per esempio. sul mio sistema, php.ini riga 535 scrive 'error_reporting = E_ALL & ~ E_DEPRECATED & ~ E_STRICT' – Pacerier

risposta

52

Questo valore è in realtà bitmap mask, una somma di costanti.

Quindi, 22527 è

16384 E_USER_DEPRECATED 
+ 
    4096 E_RECOVERABLE_ERROR 
+ 
    etc... 

Nel tuo caso si tratta di E_ALL & ~E_DEPRECATED, verrà visualizzato ogni errore, tranne E_DEPRECATED e E_STRICT (dal E_STRICT non è incluso nel E_ALL)

+5

Solo per segnalare che dal momento che PHP 5.4.0 'E_STRICT' è ora parte di' E_ALL' di nuovo – gustyaquino

29

Questo valore è uno o più di these constants orinato a bit.

phpinfo() visualizza in genere il valore numerico anziché le costanti o le scorciatoie utilizzate nei file INI. Ecco un esempio per mappare il valore a costanti:

<?php 
$error_reporting_value = 22527; 
$constants = array(
    "E_ERROR", 
    "E_WARNING", 
    "E_PARSE", 
    "E_NOTICE", 
    "E_CORE_ERROR", 
    "E_CORE_WARNING", 
    "E_COMPILE_ERROR", 
    "E_COMPILE_WARNING", 
    "E_USER_ERROR", 
    "E_USER_WARNING", 
    "E_USER_NOTICE", 
    "E_STRICT", 
    "E_RECOVERABLE_ERROR", 
    "E_DEPRECATED", 
    "E_USER_DEPRECATED", 
    "E_ALL" 
); 
$included = array(); 
$excluded = array(); 
foreach ($constants as $constant) { 
    $value = constant($constant); 
    if (($error_reporting_value & $value) === $value) { 
     $included[] = $constant; 
    } else { 
     $excluded[] = $constant; 
    } 
} 
echo "error reporting " . $error_reporting_value . PHP_EOL; 
echo "includes " . implode(", ", $included) . PHP_EOL; 
echo "excludes " . implode(", ", $excluded) . PHP_EOL; 

uscita:

error reporting 22527 
includes E_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, E_RECOVERABLE_ERROR, E_USER_DEPRECATED 
excludes E_STRICT, E_DEPRECATED, E_ALL 
+1

come mai E_ALL non è lì? –

+0

Nel file php.ini ho aggiunto error_reporting = E_ERROR & E_WARNING & E_PARSE & E_NOTICE & E_CORE_ERROR & E_CORE_WARNING & E_COMPILE_ERROR & E_COMPILE_WARNING & E_USER_ERROR & E_USER_WARNING & E_USER_NOTICE & E_RECOVERABLE_ERROR & E_USER_DEPRECATED e ottengo error_reporting 0 – themis

+0

& è un'operazione bit per bit, non un operazione booleana. Quindi stai facendo qualcosa come 100 e 010 e 001, che è 000. – tschwab

3

MAI utilizzare il valore numerico per imposta la segnalazione degli errori, come meaning of that value can change ma il significato delle costanti (come E_ALL, E_STRICT, ecc) probabilmente no:

Il nuovo livello error_reporting. Accetta una maschera di bit o costanti con nome. L'utilizzo di costanti denominate è fortemente consigliato per garantire la compatibilità per le versioni future. Man mano che vengono aggiunti i livelli di errore, l'intervallo di numeri interi aumenta, , quindi i vecchi livelli di errore basati su numeri interi non si comportano sempre come previsto.

(e si noti che a partire da PHP 5.4, E_ALL ora include E_STRICT)

se si desidera che la segnalazione più rigorosa nei secoli dei secoli, è possibile impostare error_reporting ad un numero molto elevato in modo da garantire (?) che you will report all errors forever:

Utilizzando PHP costanti fuori di PHP, come in httpd.conf, non avrà alcun significato utile così in questi casi sono necessari i valori interi. E poiché i livelli di errore verranno aggiunti nel tempo, il valore massimo (per E_ALL) cambierà probabilmente. Quindi al posto di E_ALL si consideri l'utilizzo di un valore più grande per coprire tutti i campi bit da ora e anche nel futuro, un valore numerico come 2147483647 (include tutti gli errori, non solo E_ALL).

Controlla il tuo php.ini per il valore di error_reporting in formato di costanti PHP leggibile da umani. La funzione phpinfo() sembra mostrare sempre il valore numerico piuttosto che mostrare le costanti.

Ma, personalmente, lascio php.ini con i valori predefiniti per la segnalazione degli errori. Invece metto semplicemente la funzione di segnalazione degli errori in cima a qualsiasi script php su cui sto lavorando per sovrascrivere i valori predefiniti. ad esempio:

error_reporting(E_ALL | E_STRICT); 
+0

Interessante, non mi sono reso conto che 0x7FFFFFFF era primo! –

+0

Abbastanza strano, eh? –

+1

Ma ** 0 ** farà sempre riferimento a "Disattiva tutto" anche se vengono aggiunti altri livelli di segnalazione degli errori, vero? – Pacerier