2021-10-14 17:58:21 +02:00
< ? php
if ( ! isset ( $site ) )
{
require_once ( " config.inc.php " );
header ( 'Location: ' . $accueil );
}
require_once 'db.class.php' ;
require_once 'fonctions.inc.php' ;
// $level => INFO, ALERT, ERROR
function log_write ( $log , $level = INFO )
{
global $table_prefix , $webmaster , $db ;
2021-10-17 15:55:05 +02:00
// actual connected user or user 'script'
$user = ( ! empty ( $_SERVER [ " PHP_AUTH_USER " ]) ? $_SERVER [ " PHP_AUTH_USER " ] : 'Intruder?!' );
//mail message
2021-10-14 17:58:21 +02:00
$log_mail = str_replace ( " <br /> " , " \n " , $log ) . " \n " ;
$log_mail .= ( ! empty ( $_SERVER [ " REQUEST_METHOD " ]) ? '$_SERVER["REQUEST_METHOD"]' . $_SERVER [ " REQUEST_METHOD " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " QUERY_STRING " ]) ? '$_SERVER["QUERY_STRING"]' . $_SERVER [ " QUERY_STRING " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " HTTP_ACCEPT_LANGUAGE " ]) ? '$_SERVER["HTTP_ACCEPT_LANGUAGE"]' . $_SERVER [ " HTTP_ACCEPT_LANGUAGE " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " HTTP_USER_AGENT " ]) ? '$_SERVER["HTTP_USER_AGENT"]' . $_SERVER [ " HTTP_USER_AGENT " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " REMOTE_ADDR " ]) ? '$_SERVER["REMOTE_ADDR"]' . $_SERVER [ " REMOTE_ADDR " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " REMOTE_HOST " ]) ? '$_SERVER["REMOTE_HOST"]' . $_SERVER [ " REMOTE_HOST " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " REMOTE_USER " ]) ? '$_SERVER["REMOTE_USER"]' . $_SERVER [ " REMOTE_USER " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " REQUEST_URI " ]) ? '$_SERVER["REQUEST_URI"]' . $_SERVER [ " REQUEST_URI " ] . " \n " : '' );
$log_mail . = " Utilisateur: $user \n " ;
$log_mail .= ( ! empty ( $_SERVER [ " ORIG_PATH_INFO " ]) ? '$_SERVER["ORIG_PATH_INFO"]' . $_SERVER [ " ORIG_PATH_INFO " ] . " \n " : '' );
$log_mail .= ( ! empty ( $_SERVER [ " PATH_INFO " ]) ? '$_SERVER["PATH_INFO"]' . $_SERVER [ " PATH_INFO " ] . " \n " : '' );
2021-10-17 15:55:05 +02:00
// verifying connection to database
2021-10-14 17:58:21 +02:00
if ( ! empty ( $db -> connect ) )
{
2021-10-17 15:55:05 +02:00
// saving log into database
2021-10-14 17:58:21 +02:00
$query = 'INSERT INTO ' . $db -> protect ( $table_prefix ) . 'logs SET date=NOW(), auteur="' . $db -> protect ( $user ) . '", log="' . $db -> protect ( $log ) . '", niveau="' . $db -> protect ( $level ) . '"' ;
$db -> query ( $query );
if ( ! $db -> result )
{
2021-10-17 15:55:05 +02:00
// send mail in case of query error
2021-10-14 17:58:21 +02:00
$text = $db -> error () . " \n \n " . $log_mail ;
mail ( $webmaster , " Erreur écriture logs => " . __file__ . " ligne " . __line__ , $text );
}
} else
{
2021-10-17 15:55:05 +02:00
//send mail in case of database connection error
2021-10-14 17:58:21 +02:00
mail ( $webmaster , " Erreur de connecxion à la base de données => " . __file__ . " ligne " . __line__ , $log_mail );
}
2021-10-17 15:55:05 +02:00
// send mail to admin in case of level > INFO
2021-10-14 17:58:21 +02:00
if ( $level == ALERT )
{
mail ( $webmaster , " Alerte Site Web " , $log_mail );
} elseif ( $level == ERROR )
{
mail ( $webmaster , " Erreur Site Web " , $log_mail );
}
}
2021-10-17 15:55:05 +02:00
// $w_db = true -> write log in database (default)
// $die = true -> execute die() -> script end
2021-10-14 17:58:21 +02:00
function log_error ( $log , $w_db = true , $die = false )
{
global $webmaster , $headers , $accueil , $db ;
if ( $w_db ) log_write ( $log , ERROR );
$log_err = 'erreur dans la requête<br/>un rapport détaillé a été envoyé au webmaster' ;
if ( $die )
{
//echo "\n";
2021-10-17 15:55:05 +02:00
die ( $log_err );
2021-10-14 17:58:21 +02:00
} else
{
2021-10-17 15:55:05 +02:00
//store error in table session[]
2021-10-14 17:58:21 +02:00
$_SESSION [ 'error' ] = $log_err ;
}
}
2021-10-17 15:55:05 +02:00
//diplay logs
2021-10-14 17:58:21 +02:00
function affich_log ( $nl , $np = 1 , $level = 0 )
{
global $table_prefix , $base_url , $path , $page ;
$db = new db ();
if ( ! empty ( $db -> connect ) )
{
$level_s = array ( " aucun " , " info " , " alerte " , " erreur " );
if ( $level < 0 or $level > 3 ) $level = 0 ;
$query = 'SELECT * FROM ' . $table_prefix . 'logs' ;
if ( $level != 0 )
{
$query .= " WHERE niveau= " . $level ;
}
$query .= ' ORDER BY id_log DESC' ;
$db -> query ( $query );
$total_lignes = $db -> result -> num_rows ;
/////////////:: Calcule le nombre de pages de logs
$n_pages = round ( $total_lignes / $nl );
if ( $np == 0 )
{
$np = 1 ;
} elseif ( $np > $n_pages )
{
$np = $n_pages ;
}
//////////////////////////////////////////////////////
////////////////////////// Bouton de choix du niveau de log
echo " \n " . '<form action="none" method="post" enctype="multipart/form-data">' ;
echo " niveau de log " . ' <select id="level" size="0" onchange="window.location.href = \'logs.php?np=\' + document.getElementById(\'np\').value + \'&level=\' + document.getElementById(\'level\').value ;">' ;
for ( $n = 0 ; $n <= count ( $level_s ) - 1 ; $n ++ )
{
echo '<option value="' . $n . '"' ;
if ( $n == $level )
{
echo ' selected="selected"' ;
}
echo '>' . $level_s [ $n ] . '</option>' ;
}
echo '</select><noscript><input type="submit" name="submit" Value="none" /></noscript>' ;
echo " </form> \n " ;
/////////////////////////////////////////////////////////
// Bouton de choix du numéro de page
echo " \n " . '<form action="none" method="post" enctype="multipart/form-data">' ;
echo 'Page n° <select id="np" name="np" size="0" onchange="window.location.href = \'logs.php?np=\' + document.getElementById(\'np\').value + \'&level=\' + document.getElementById(\'level\').value ;">' ;
for ( $n = 1 ; $n <= $n_pages ; $n ++ )
{
echo '<option value="' . $n . '"' ;
if ( $n == $np )
{
echo ' selected="selected"' ;
}
echo '>' . $n . '</option>' ;
}
echo '</select><noscript><input type="submit" name="submit" Value="Envoyer" /></noscript>' ;
echo " </form> \n " ;
//////////////////////////////////////////////////////////////
2021-10-17 15:55:05 +02:00
//////////////// display next and previous page
2021-10-14 17:58:21 +02:00
if ( $np > 1 )
{
echo '<a href="logs.php?np=' . ( $np - 1 ) . '">Page précédente</a>' ;
}
if ( $np < $n_pages )
{
echo ' <a href="logs.php?np=' . ( $np + 1 ) . '">Page suivante</a>' ;
}
//////////////////////////////////////////////////////////////////
2021-10-17 15:55:05 +02:00
/////////////////////// display logs in table
2021-10-14 17:58:21 +02:00
if ( $total_lignes != 0 )
{
$query = 'SELECT * FROM ' . $table_prefix . 'logs' ;
if ( $level != 0 )
{
$query .= " WHERE niveau=' " . $level . " ' " ;
}
$query .= ' ORDER BY id_log DESC LIMIT ' . ( ( ( $np - 1 ) * $nl ) ) . ',' . $nl ;
$db -> query ( $query );
echo " <table border='1' width='90%'><tr><td><b>date</b></td><td><b>auteur</b></td><td><b>log</b></td><td><b>niveau</b></td></tr> \n " ;
while ( ( $donnees = $db -> result -> fetch_array ()) )
{
$niveau = $donnees [ " niveau " ];
echo " <tr><td> " . $donnees [ " date " ] . " </td><td> " . $donnees [ " auteur " ] . " </td><td> " . htmlentities ( $donnees [ " log " ], ENT_QUOTES ) . " </td><td> " . $level_s [ $niveau ] . " </td></tr> \n " ;
}
echo " </table> \n " ;
} else
{
print " aucune réponse " ;
}
}
}
?>