sabato, giugno 05, 2004

PHP Logging to file

Se usate il PHP sarete abituati nella maggior parte dei casi (ecezzione fanno coloro che usano determinati editor che fanno il debug automatico) a vedere gli errori sul monitor, peccato che questi errori posso essere utilizzati da un'attacker per bucare il sistema dove hostate il vostro sito; come proteggersi allora? semplice disabilitando gli errori a schermo
Nel file php.ini :
display_errors : On -> Off

ma ora come faccio ad avere un minimo di resoconto sugli errori e come posso far si che appaia un'utente con le scuse per il malfuzionamento del sito?
Presto detto ecco qua l'HOTWO che fa per voi:
  1. create un file .htaccess e inserite queste righe :
    php_flag display_errors on
    php_flag output_buffering on
    php_value output_handler output_handler
    php_value auto_prepend_file prepend .php
    (attenzione: dovete abilitare gli .htaccess con l'istruzione AllowOverride All all'interno del file di config di Apache)

  2. Create un file php in cui inserire:
    error_reporting(0);

    function EngineErrorHandler($errno, $errmsg, $filename, $filenum, $vars)
    {
    $dt = date("d-m-Y H:i:s");

    $errortype = array(
    1 => 'Error',
    2 => 'Warning',
    4 => 'Parsing Error',
    8 => 'Notice'
    );

    $err = '<errorentry>\n';
    $err .= '\t<datetime>'.$dt.'</datetime>';
    $err .= '\t<errnum>'.$errno.'</errnum>';
    $err .= '\t<errortype>'.$errortype[$errno].'</errortype>';
    $err .= '\t<errormsg>'.$errmsg.'</errormsg>';
    $err .= '\t<scriptname>'.$filename.'</scriptname>';
    $err .= '\t<scriptlinenum>'.$linenum.'</scriptlinenum>';
    $err .= '</errorentry>';

    echo 'CIO CHE SI VUOLE DIRE ALL\'UTENTE';

    error_log($err,3,$_SERVER['DOCUMENT_ROOT'].'/log/error.log'); //salvo l'errore in un file
    }

    $old_error_handler = set_error_handler("EngineErrorHandler");
  3. Includete questo file nei vostri script (include_once) e il gioco è fatto oltre ad avere l'errore loggato in un file in forma piu o meno XML avrete anche l'errore gestito a video ;)

Non male questo HOWTO vero? cmq. a breve modifichero il file affinchè si comporti come il sistema di Logging sotto JAVA (java.io.logging) che ho trovato molto valido. Ora mi rituffo nel php con l'editor a mio giudizio per ecellenza sotto linux : Eclipse e il suo magnifico plug-in TruStudio Php