Newsgroup: it.comp.www.php
Titolo: PHPNuke 5.5+ ISO9002 (laugh)

Un semplice e fetentissimo sistema di error reporting. L'utente non vede
nulla (be', in teoria) mentre naviga, mentre dal modulo "Errors" si puo'
vedere cosa #£/$&"@!! e' successo, e dove.
Trova un bel po' di cosucce storte anche in una installazione "pulita".
E vari tipi di errori si salvano lo stesso perche' Errors non li vede.
Fatemi sapere cosa mi sono scordato :-)))
+++
Comunque:
1. Riga da aggiungere nella tabella nuke_modules
	?, 'Errors', 'Errors', 1, 0
2. Tabella da creare nel database
	CREATE TABLE nuke_errors
	(
		creation datetime,
		username text,
		priority smallint,
		filename text,
		line integer,
		errortext text
	);
3. File da aggiungere nella directory root
<?
	// errors.php
    error_reporting(E_ALL);
    set_error_handler('ErrorHandler');
    function ErrorHandler($gravity, $errstr, $errfile, $errline)
    {
        global $dbi, $prefix;
        switch ($gravity)
        {
            case E_USER_ERROR:
                print <<< FATALERROR
<b>FATAL</b>: $errstr<br>
<tt>Errore fatale in $errfile, linea $errline. Elaborazione
interrotta.</tt>
FATALERROR;
                exit -1;
                break;
            case E_USER_WARNING:
echo "<b>ERROR</b>: $errstr<br>\n";
break;
            case E_USER_NOTICE:
            case E_WARNING:
            case E_NOTICE:
            {
                if (isset($dbi))
                {
                    global $REMOTE_ADDR;
                    $errtext = AddSlashes(StripSlashes($errstr));
                    sql_query("INSERT INTO ".$prefix."_errorlog VALUES
(now(), '
$REMOTE_ADDR',$gravity,'$errfile','$errline','$errtext');", $dbi);
                }
                break;
            }
            default:
                echo "<br>Unknown error type $gravity; $errstr<br>";
                break;
        }
    }
?>
 
4. Modifica in fondo al file config.php:
	require_once 'errors.php';	// Aggiunta questa riga
?>
5. Modulo da aggiungere in /modules/Errors (directory da creare)
<?
	// index.php
	    if (!eregi("modules.php", $PHP_SELF))
        die ("You can't access this file directly...");
    require_once('mainfile.php');
    $module_name = basename(dirname(__FILE__));
    get_lang($module_name);
    include('header.php');
    OpenTable();
    if (isset($cmd))
    {
        switch($cmd)
        {
            case 'DELETE':
                list($filename, $errline) = explode('|', $error);
                $errline = eregi_replace('[^0-9]', '', $errline);
                if ($errline != '')
                {
                    $filename= eregi_replace('[^a-z_0-9 /\.\-]', '',
$filename);
                    sql_query("DELETE FROM $prefix" . "_errorlog WHERE
filename=
'$filename' AND line=$errline;");
                }
        }
 
    $exec = sql_query("SELECT count(*) AS frequency, priority, filename,
line, errortext FROM $prefix" . '_errorlog GROUP BY priority, filename,
line, errortext ORDER BY frequency DESC;', $dbi);
    $rows = sql_num_rows($exec);
    $cols = 5;
    print <<< HERE
<TABLE WIDTH="100%" BORDER=1 CELLSPACING=0 CELLPADDING=1>
<TR>
    <TD COLSPAN="$cols">
    <B>Error Reporting System v1.0</B>
    </TD>
    <TD>$rows error(s)</TD>
</TR>
<TR>
    <TD>&nbsp;</TD>
    <TD>Count</TD>
    <TD>Priority</TD>
    <TD>Filename</TD>
    <TD>Line</TD>
    <TD WIDTH="100%">Error Text</TD>
</TR>
HERE;
    $URLBASE = "$PHP_SELF?name=Errors&cmd=DELETE&error=";
    for ($i = 0; $i < $rows; $i++)
    {
        $data = sql_fetch_array($exec, $dbi);
	$URL = $URLBASE . UrlEncode("$data[filename]|$data[line]");
        print "\t<TR>\n";
	print "\t\t<TD><A HREF=\"$URL\">DELETE</A></TD>";
        for ($j = 0; $j < $cols; $j++)
        {
            print "\t\t<TD><TT>$data[$j]</TT></TD>\n";
        }
        print "\t</TR>\n";
    }
    print "</TABLE>\n";
    CloseTable();
    include('footer.php');
?>
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.


Credo che dentro il file index del modulo errors ci sia una parentesi grafa
non chiusa. Forse quella di switch($cmd)      {
E anche print <<<HERE va sistemato.
Comunque sembra molto utile anche se in tabella per ora non mi ha messo
neanche nu errore.
ciao
Mirko