125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|   ----------------------------------------------------------------------
 | |
|   AlternC - Web Hosting System
 | |
|   Copyright (C) 2000-2012 by the AlternC Development Team.
 | |
|   https://alternc.org/
 | |
|   ----------------------------------------------------------------------
 | |
|   LICENSE
 | |
| 
 | |
|   This program is free software; you can redistribute it and/or
 | |
|   modify it under the terms of the GNU General Public License (GPL)
 | |
|   as published by the Free Software Foundation; either version 2
 | |
|   of the License, or (at your option) any later version.
 | |
| 
 | |
|   This program is distributed in the hope that it will be useful,
 | |
|   but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|   GNU General Public License for more details.
 | |
| 
 | |
|   To read the license please visit http://www.gnu.org/copyleft/gpl.html
 | |
|   ----------------------------------------------------------------------
 | |
|   Purpose of file: Manage Log files for users
 | |
|   ----------------------------------------------------------------------
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Classe de gestion des erreurs apparaissant lors d'appels API.
 | |
|  */
 | |
| class m_log {
 | |
| 
 | |
|     function m_log() {
 | |
|         
 | |
|     }
 | |
| 
 | |
|     function list_logs_directory($dir) {
 | |
|         global $cuid, $err;
 | |
|         $err->log("log", "list_logs_directory");
 | |
| 
 | |
|         $c = array();
 | |
|         foreach (glob("${dir}/*log*") as $absfile) {
 | |
|             $c[] = array("name" => basename($absfile),
 | |
|                 "creation_date" => date("F d Y H:i:s", filectime($absfile)),
 | |
|                 "mtime" => filemtime($absfile),
 | |
|                 "filesize" => filesize($absfile),
 | |
|                 "downlink" => urlencode(basename($absfile)),
 | |
|             );
 | |
|         }
 | |
|         usort($c, "m_log::compare_logtime");
 | |
|         return $c;
 | |
|     }
 | |
| 
 | |
|     // Used by list_logs_directory to sort
 | |
|     private function compare_logname($a, $b) {
 | |
|         return strcmp($a['name'], $b['name']);
 | |
|     }
 | |
| 
 | |
|     // Used by list_logs_directory to sort
 | |
|     private function compare_logtime($a, $b) {
 | |
|         return $b['mtime'] - $a['mtime'];
 | |
|     }
 | |
| 
 | |
|     function hook_menu() {
 | |
|         $obj = array(
 | |
|             'title' => _("Logs"),
 | |
|             'ico' => 'images/logs.png',
 | |
|             'link' => 'logs_list.php',
 | |
|             'pos' => 130,
 | |
|                 );
 | |
| 
 | |
|         return $obj;
 | |
|     }
 | |
| 
 | |
|     function list_logs_directory_all($dirs) {
 | |
|         global $err;
 | |
|         $err->log("log", "get_logs_directory_all");
 | |
|         $c = array();
 | |
|         foreach ($dirs as $dir => $val) {
 | |
|             $c[$dir] = $this->list_logs_directory($val);
 | |
|         }
 | |
|         return $c;
 | |
|     }
 | |
| 
 | |
|     function get_logs_directory() {
 | |
|         global $cuid, $mem, $err;
 | |
|         $err->log("log", "get_logs_directory");
 | |
|         // Return an array to allow multiple directory in the future
 | |
|         if (defined('ALTERNC_LOGS_ARCHIVE')) {
 | |
|             $c = array("dir" => ALTERNC_LOGS_ARCHIVE . "/" . $cuid . "-" . $mem->user["login"]);
 | |
|         } else {
 | |
|             $c = array("dir" => ALTERNC_LOGS . "/" . $cuid . "-" . $mem->user["login"]);
 | |
|         }
 | |
|         return $c;
 | |
|     }
 | |
| 
 | |
|     function download_link($file) {
 | |
|         global $err;
 | |
|         $err->log("log", "download_link");
 | |
|         header("Content-Disposition: attachment; filename=" . $file . "");
 | |
|         header("Content-Type: application/force-download");
 | |
|         header("Content-Transfer-Encoding: binary");
 | |
|         $f = $this->get_logs_directory();
 | |
|         $ff = $f['dir'] . "/" . basename($file);
 | |
|         set_time_limit(0);
 | |
|         readfile($ff);
 | |
|     }
 | |
| 
 | |
|     function tail($file, $lines = 20) {
 | |
|         global $err;
 | |
|         $err->log("log", "tail");
 | |
|         $lines = intval($lines);
 | |
|         if ($lines <= 0) {
 | |
|             $lines = 20;
 | |
|         }
 | |
|         $f = $this->get_logs_directory();
 | |
|         $ff = $f['dir'] . "/" . basename($file);
 | |
|         $out=array();
 | |
|         exec("tail -" . $lines . " " . escapeshellarg($ff), $out);
 | |
|         return implode("\n", $out);
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 | |
| // end class
 |