Aggiornamento:
Secondo @mpc nei commenti su questa risposta, gli errori vengono visualizzati nel browser quando display_errors
è in, ma non compaiono nel registro Supponevo che gli errori non apparissero affatto.
Gli errori E_NOTICE
sono gli unici che non vengono visualizzati nel registro o sono interessati tutti i tipi di errore? Se sono tutti i tipi di errore, la prima cosa che verificherei è se la registrazione degli errori è abilitata o meno. Prova a impostare ini_set('log_errors', 'On');
nella parte superiore del tuo script. Se ciò non funziona, prova a impostare il tuo file di registro su qualcosa che è sicuro al al quale il tuo server può scrivere chiamando lo ini_set('error_log', 'your_file_path');
. Se nessuno di questi funziona, allora penso che qualcosa sia seriamente sbagliato nell'installazione di PHP. Se una di queste correzioni funziona, puoi inserirle nel tuo attuale php.ini
se hai accesso.
risposta originale:
Sulla base del livello error_reporting
nella sua interrogazione, il vostro PHP installare dovrebbe già essere configurato per segnalare E_NOTICE
errori. Se non registra questi errori, qualcosa non va. Vorrei suggerire di attivare display_errors
per vedere se vengono visualizzati errori E_NOTICE
. Se non riesci a modificare il file php.ini
, prova a eseguire ini_set('display_errors', 'On');
nella parte superiore dello script. Ovviamente, questi errori verranno visualizzati e/o registrati solo se ne attivi uno, quindi dovresti ricontrollare che lo stai facendo in qualche modo.
Un avvertimento è che il livello di errore E_DEPRECATED
è stato introdotto solo con PHP 5.3. Quando ho appena testato l'impostazione E_DEPRECATED
su un'installazione di PHP 5.2, PHP ha risposto con errori e impostato il livello error_reporting
su 0
, il che significa che riporta senza errori. Mentre non ha senso che un file 5.3 php.ini
pre-5.3 utilizzi questa impostazione, ritengo sia importante almeno aumentare la possibilità che tu stia utilizzando E_DEPRECATED
su un server che non lo supporta. Se non sei sicuro della tua versione, puoi eseguire phpinfo()
e visualizzerà una pagina con molte e molte informazioni, incluso il numero di versione per l'installazione.
Nonostante quanto sopra, se ho frainteso la tua domanda e stai solo parlando di creare il tuo log personalizzato, allora devi creare una funzione da eseguire quando si verifica un errore e assegnarlo come gestore di errori usando il Funzione set_error_handler()
.
È importante notare che quando si utilizza set_error_handler()
, si ignora completamente il gestore di errori predefinito di PHP. Ciò significa che il tuo livello error_handler
diventa privo di significato. Tutti gli errori, indipendentemente dalla loro gravità, verranno passati alla funzione di gestore degli errori che hai creato. Il primo parametro passato a questa funzione da PHP sarà il numero dell'errore, che è il valore numerico della costante E_xxx
dell'errore trovato. Avrai bisogno di scrivere codice personalizzato per catturare solo gli errori che vuoi.
Ad esempio, per catturare soloE_NOTICE
errori, la funzione sarebbe simile a questa:
function my_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno == E_NOTICE) {
// handle/log the error
}
}
set_error_handler("my_error_handler");
A meno che non mi manchi qualcosa, dovrebbe già esserci già un avviso di registrazione. Hai controllato se sta usando un gestore di errori personalizzato? –
@ Álvaro G. Vicario - i miei pensieri esattamente. Non esiste un gestore di errori personalizzato, quando accendo la visualizzazione degli errori (display_errors = On), le notifiche vengono visualizzate, ma non registrate! – chattsm
Per iniziare a ridurre il problema, è possibile dimenticare il codice effettivo e provare [questo semplice frammento] (http://pastebin.com/6NCRcaUd). –