179 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			179 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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;
 | |
| 	// actual connected user or user 'script'
 | |
| 	$user = (!empty( $_SERVER["PHP_AUTH_USER"])?$_SERVER["PHP_AUTH_USER"]:'Intruder?!');
 | |
| 
 | |
| 	//mail message
 | |
| 	$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":'' );
 | |
| 
 | |
| 	// verifying connection to database
 | |
| 	if( !empty( $db->connect ) )
 | |
| 	{
 | |
| 		// saving log into database
 | |
| 		$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 )
 | |
| 		{
 | |
| 			// send mail in case of query error
 | |
| 			$text = $db->error() . "\n\n" . $log_mail;
 | |
| 			mail( $webmaster, "Erreur écriture logs => " . __file__ . " ligne " .  __line__, $text );
 | |
| 		}
 | |
| 
 | |
| 	}else
 | |
| 	{
 | |
| 		//send mail in case of database connection error
 | |
| 		mail( $webmaster, "Erreur de connecxion à la base de données => " . __file__ . " ligne " .  __line__ , $log_mail);
 | |
| 	}
 | |
| 	// send mail to admin in case of level > INFO
 | |
| 	if ( $level == ALERT )
 | |
| 	{
 | |
| 		mail( $webmaster, "Alerte Site Web", $log_mail );
 | |
| 	}elseif ( $level == ERROR )
 | |
| 	{
 | |
| 		mail( $webmaster, "Erreur Site Web", $log_mail );
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // $w_db  = true -> write log in database (default)
 | |
| // $die = true -> execute die() -> script end
 | |
| 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";
 | |
| 		die( $log_err );
 | |
| 	}else
 | |
| 	{
 | |
| 		//store error in table session[]
 | |
| 		$_SESSION['error'] = $log_err;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| //diplay logs
 | |
| 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";
 | |
| 		//////////////////////////////////////////////////////////////
 | |
| 
 | |
| 		//////////////// display next and previous page
 | |
| 		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>';
 | |
| 		}
 | |
| 		//////////////////////////////////////////////////////////////////
 | |
| 
 | |
| 		/////////////////////// display logs in table
 | |
| 		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";
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| ?>
 |