Configurazione di Runtime

Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.

Parametri di configurazione per la gestione degli errori e dei log
Nome Default Modificabile Storico dei cambiamenti
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "1" PHP_INI_ALL Prima di PHP 8.0.0, il valore di default era "0".
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL  
ignore_repeated_errors "0" PHP_INI_ALL  
ignore_repeated_source "0" PHP_INI_ALL  
report_memleaks "1" PHP_INI_ALL  
track_errors "0" PHP_INI_ALL Deprecato a partire da PHP 7.2.0, rimosso a partire da PHP 8.0.0.
html_errors "1" PHP_INI_ALL  
xmlrpc_errors "0" PHP_INI_SYSTEM  
xmlrpc_error_number "0" PHP_INI_ALL  
docref_root "" PHP_INI_ALL  
docref_ext "" PHP_INI_ALL  
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  
error_log_mode 0o644 PHP_INI_ALL Disponibile a partire da PHP 8.2.0
syslog.facility "LOG_USER" PHP_INI_SYSTEM Disponibile da PHP 7.3.0.
syslog.filter "no-ctrl" PHP_INI_ALL Disponibile da PHP 7.3.0.
syslog.ident "php" PHP_INI_SYSTEM Disponibile da PHP 7.3.0.
Per maggiori dettagli e definizioni sui modi PHP_INI_*, vedere Where a configuration setting may be set.

Breve descrizione dei parametri di configurazione.

error_reporting int

Imposta il livello di errore da visualizzare. Il parametro è sia un intero rappresentante un campo di bit, o una costante nominale. I livelli ri report degli errori e le costanti previste sono descritte in Costanti Predefinite, e in php.ini. Per impostare il livello in fase di esecuzione utilizzare la funzione error_reporting(). Vedere anche il parametro display_errors.

Il valore di default è E_ALL.

Prima di PHP 8.0.0, il valore di default era: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED. Questo significa che le diagnostiche di livello E_NOTICE, E_STRICT e E_DEPRECATED non venivano mostrate.

Nota: Costanti PHP fuori da PHP

L'utilizzo di constanti PHP fuori da PHP, come ad esempio in httpd.conf, non ha senso tranne nei casi in cui siano richiesti valori di tipo int. Inoltre, poiché i livelli di error sono aggiunti nel tempo, il valore massimo (per E_ALL) molto probabilmente cambierà. Quindi, al posto di E_ALL, si consideri di usare un valore più grande per coprire tutti i bit sia per il presente che per il futuro, un valore numerico come 2147483647 (include tutti gli errori, non solo E_ALL).

display_errors string

Questo parametro determina se gli errori devono essere visualizzati sullo schermo come parte dell'output o se devono essere nascosti all'utente.

Il valore "stderr" invia gli errori a stderr invece che a stdout.

Nota:

Questa opzione è di supporto allo sviluppo, e non deve mai essere utilizzata nei sistemi di produzione (ad esempio collegati ad Internet).

Nota:

Anche se display_error può essere impostata a runtime (con la funzione ini-set()), non avrà alcun effetto se lo script ha errori fatali, perché l'azione desiderata a runtime non sarà eseguita.

display_startup_errors bool

Anche quando è abilitata la visualizzazione degli errori, gli errori che avvengono durante l'avvio del PHP non sono visualizzati. Si raccomanda di mantenere display_startup_errors impostato a off, tranne che nelle fasi di sviluppo.

log_errors bool

Indica se i messaggi di errore debbano essere registrati nell'errorlog del server o in error_log. Questo opzione dipende dal server.

Nota:

Sui siti di produzione si raccomanda di utilizzare la registrazione degli errori piuttosto che visualizzarli.

log_errors_max_len int

Imposta la massima lunghezza del log degli errori in byte. Nell'errorlog error_log viene indicata anche la fonte del messaggio. Il valore di default è 1024 e 0 indica di non applicare alcuna limitazione. Questa dimensione viene applicata agli errori registrati, agli errori visualizzati e anche a $php_errormsg, ma non alle funzioni chiamate esplicitamente come error_log().

Quando un integer è usato, il valore è misurato in byte. Si può anche usare una notazione abbreviata come descritto in questa FAQ.
ignore_repeated_errors bool

Non registra i messaggi ripetuti. Gli errori ripetutti sono gli errori che si verificano nel medesimo file nella linea, e vengono riportati sino a quando ignore_repeated_source non viene impostato a true.

ignore_repeated_source bool

Ignora la fonte del messaggio quando si ignora i messaggi ripetuti. Quando questa impostazione è a On non saranno registrati messaggi ripetutida differenti linee del codice.

report_memleaks bool

Se questo parametro è impostato a On (il valore predefinito), verrà mostrato un rapporto delle fughe di memoria identificate dal gestore di memoria di Zend. Questo rapporto verrà inviato a stderr sulle piattaforme Posix. Su Windows, verrà inviato al debugger usando OutputDebugString() e può essere visualizzato con strumenti come » DbgView. Questa impostazione ha effetto solo in un build di debug e se error_reporting include iE_WARNING nell'elenco degli errori abilitati.

track_errors bool

Se abilitato, l'ultimo messaggio di errore sarà sempre presente nella variabile $php_errormsg.

html_errors boolean

Se abilitato, i messaggi di errore includeranno i tag HTML. Il formato per gli errori in HTML produce un testo cliccabile che indirizza l'utente alla pagina che descrive l'errore o la funzione che ha generato l'errore. Questi riferimenti sono influenzati da docref_root e docref_ext.

Se disabilitato, il messaggio di errore sarà solo testo normale.

xmlrpc_errors bool

Se abilitato, disattiva il normale rapporto degli errori e formatta gli errori come un messaggio d'errore XML-RPC.

xmlrpc_error_number int

Utilizzato come valore dell'elemento XML-RPC faultCode.

docref_root string

Nel nuovo formato degli errori è previsto un riferimento alla pagina che descrive l'errore o alla funzione che ha generato l'errore. Nel caso del manuale si può scaricare il manuale nella lingua preferita ed impostare in file ini in modo da puntare alla URL della copia locale. Se la copia locale è raggiungibile tramite '/manual/' si può utilizzare docref_root=/manual/. In aggiunta si può impostare docref_ext a riconoscere l'estensione dei file nella copia, es. docref_ext=.html. E' possibile utilizzare riferimenti esterni. Ad esempio, si può utilizzare docref_root=http://manual/en/ oppure docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

Il più delle volte si imposta docref_root ad un valore che termina con value to end with a slash '/'. But see the second example above which does not have nor need it.

Nota:

Questa caratteristica è utile nello sviluppo poiché rende facile la ricerca della descrzione delle funzioni. Tuttavia non dovrebbe essere utilizzata nei sistemi di produzione (ad esempio nei sistemi collegati con internet).

docref_ext string

Vedere docref_root.

Nota:

Il valore di docref_ext deve cominciare con un punto ".".

error_prepend_string string

Stringa da visualizzare prima del messaggio di errore. Utilizzato solo quando il messaggio di errore viene visualizzato sullo schermo. Lo scopo principale è quello di poter anteporre un markup HTML aggiuntivo al messaggio di errore.

error_append_string string

Stringa da visualizzare dopo il messaggio di errore. Utilizzato solo quando il messaggio di errore viene visualizzato sullo schermo. Lo scopo principale è quello di poter apporre un markup HTML aggiuntivo al messaggio di errore.

error_log string

Nome del file in cui gli errori devono essere registrati. Il file deve essere modificabile dall'utilizzatore del web server. Se si indica il nome speciale syslog, gli errori saranno inviati al log di sistema. Sui sistemi Unix, ciò significa syslog(3) e sui sistemi Windows indica l'event log. Vedere anche: syslog(). Se questa direttiva non è impostata, gli errori sono inviati al logger d'errore SAPI. Per esempio, è un log di errore in Apache o stderr in CLI. Vedi anche error_log().

error_log_mode int

Modalità del file per il file descritto in error_log.

syslog.facility string

Specifica che tipo di programma sta registrando il messaggio. Efficace solo se error_log è impostato a "syslog".

syslog.filter string

Specifica il tipo di filtro per filtrare i messaggi di log. I caratteri permessi vengono passati senza modifiche; tutti gli altri sono scritti nella loro rappresentazione esadecimale prefissata con \x.

  • all – la stringa di log verrà divisa in caratteri di nuova riga e tutti i caratteri verranno passati inalterati
  • ascii – la stringa di log verrà divisa in caratteri di nuova riga e tutti i caratteri ASCII a 7 bit non stampabili verranno sottoposti a escape
  • no-ctrl – la stringa di log verrà divisa in caratteri di nuova riga e tutti i caratteri non stampabili verranno sottoposti a escape
  • raw – tutti i caratteri vengono passati al logger di sistema inalterati, senza dividersi in newline (identico a PHP prima della versione 7.3)
Questa impostazione influenzerà i logging tramite error_log impostato su "syslog" e le chiamate a syslog().

Nota:

Il tipo di filtro raw è disponibile a partire da PHP 7.3.8 e PHP 7.4.0.

Questa direttiva non è supportata su Windows.
syslog.ident string

Specifica la stringa radice che è anteposta ad ogni messaggio. Efficace solo se error_log è impostato a "syslog".

add a note add a note

User Contributed Notes 5 notes

up
44
cjakeman at bcs dot org
13 years ago
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.

This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set

display_errors On

then there is a possible solution suggested under error_reporting:

<?php
error_reporting
(E_ALL);
ini_set("display_errors", 1);
include(
"file_with_errors.php");
?>


[Modified by moderator]

You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).
up
17
ohcc at 163 dot com
5 years ago
If you set the error_log directive to a relative path, it is a path relative to the document root rather than php's containing folder.
up
1
Roger
3 years ago
When `error_log` is set to a file path, log messages will automatically be prefixed with timestamp [DD-MMM-YYYY HH:MM:SS UTC].  This appears to be hard-coded, with no formatting options.
up
0
php dot net at sp-in dot dk
8 years ago
There does not appear to be a way to set a tag / ident / program for log entries in the ini file when using error_log=syslog.  When I test locally, "apache2" is used.
However, calling openlog() with an ident parameter early in your script (or using an auto_prepend_file) will make PHP use that value for all subsequent log entries. closelog() will restore the original tag.

This can be done for setting facility as well, although the original value does not seem to be restored by closelog().
up
-20
jaymore at gmail dot com
6 years ago
Document says
So in place of E_ALL consider using a larger value to cover all bit fields from now and well into the future, a numeric value like 2147483647 (includes all errors, not just E_ALL).

But it is better to set "-1" as the E_ALL value.
For example, in httpd.conf or .htaccess, use
php_value error_reporting -1
to report all kind of error without be worried by the PHP version.
To Top