195 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			5,3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			195 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			5,3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file is part of MySQLDumper released under the GNU/GPL 2 license
 | 
						|
 * http://www.mysqldumper.net
 | 
						|
 *
 | 
						|
 * @package         MySQLDumper
 | 
						|
 * @version         SVN: $Rev$
 | 
						|
 * @author          $Author$
 | 
						|
 * @lastmodified    $Date$
 | 
						|
 */
 | 
						|
/**
 | 
						|
 * Log Class
 | 
						|
 */
 | 
						|
class Log
 | 
						|
{
 | 
						|
    // Define constants
 | 
						|
    const PHP =             1;
 | 
						|
    const PERL =            2;
 | 
						|
    const PERL_COMPLETE =   3;
 | 
						|
    const ERROR =           4;
 | 
						|
 | 
						|
    const PHP_FILE = 'work/log/mysqldump.log';
 | 
						|
    const PERL_FILE = 'work/log/mysqldump_perl.log';
 | 
						|
    const PERL_COMPLETE_FILE = 'work/log/mysqldump_perl.complete.log';
 | 
						|
    const ERROR_FILE = 'work/log/error.log';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Init file handles
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __construct()
 | 
						|
    {
 | 
						|
        $this->handle = array();
 | 
						|
        $this->handle[self::PHP] = false;
 | 
						|
        $this->handle[self::PERL] = false;
 | 
						|
        $this->handle[self::PERL_COMPLETE] = false;
 | 
						|
        $this->handle[self::ERROR] = false;
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Close all open file handles on destruct
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function __destruct()
 | 
						|
    {
 | 
						|
        if ($this->handle[self::PHP]) {
 | 
						|
            $this->_close(self::PHP);
 | 
						|
        }
 | 
						|
        if (is_resource($this->handle[self::PERL])) {
 | 
						|
            $this->_close(self::PERL);
 | 
						|
        }
 | 
						|
        if (is_resource($this->handle[self::PERL_COMPLETE])) {
 | 
						|
            $this->_close(self::PERL_COMPLETE);
 | 
						|
        }
 | 
						|
       if (is_resource($this->handle[self::ERROR])) {
 | 
						|
            $this->_close(self::ERROR);
 | 
						|
       }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Open file and store file handle
 | 
						|
     *
 | 
						|
     * @param string $file
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    private function _getFileHandle($file)
 | 
						|
    {
 | 
						|
        $filename=$this->getLogfile($file);
 | 
						|
        if ($_SESSION['config']['logcompression'] == 1) {
 | 
						|
            $fileHandle = @gzopen($filename, 'a');
 | 
						|
        } else {
 | 
						|
            $fileHandle = @fopen($filename, 'ab');
 | 
						|
        }
 | 
						|
        if ($fileHandle) {
 | 
						|
            $this->handle[$file] = $fileHandle;
 | 
						|
            return $this->handle[$file];
 | 
						|
        } else {
 | 
						|
            return false;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Close a filehandle
 | 
						|
     *
 | 
						|
     * @param Loge $file The file to close
 | 
						|
     */
 | 
						|
    private function _close($file)
 | 
						|
    {
 | 
						|
        $filename=$this->getLogfile($file);
 | 
						|
        $extension = pathinfo($filename, PATHINFO_EXTENSION);
 | 
						|
        if ($extension == 'gz') {
 | 
						|
            gzclose($this->handle[$file]);
 | 
						|
        } else {
 | 
						|
            fclose($this->handle[$file]);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    /**
 | 
						|
     * Write to log file
 | 
						|
     *
 | 
						|
     * @param string $file
 | 
						|
     * @param string $message
 | 
						|
     *
 | 
						|
     * @return bool
 | 
						|
     */
 | 
						|
    public function write($file, $message)
 | 
						|
    {
 | 
						|
        // TODO get $config-values from a config class and delete global
 | 
						|
        global $config;
 | 
						|
        if (!$this->handle[$file]) {
 | 
						|
            $this->handle[$file] = $this->_getFileHandle($file);
 | 
						|
        }
 | 
						|
        $message = strip_tags($message);
 | 
						|
        // we don't need linebreaks in the log
 | 
						|
        $search = array("\n","\r");
 | 
						|
        $replace = array ('','');
 | 
						|
        $message = str_replace($search, $replace, $message);
 | 
						|
        $logMessage = date('d.m.Y H:i:s') . ' '. $message . "\n";
 | 
						|
        $_SESSION['log']['actions'][] = $logMessage;
 | 
						|
        $filename = $this->getLogfile($file);
 | 
						|
        if (@filesize($filename) > $config['log_maxsize']) {
 | 
						|
            Log::delete($file);
 | 
						|
        }
 | 
						|
        //save to log file
 | 
						|
        if ($_SESSION['config']['logcompression'] == 1) {
 | 
						|
            $res = @gzwrite($this->handle[$file], $logMessage);
 | 
						|
        } else {
 | 
						|
            $res = @fwrite($this->handle[$file], $logMessage);
 | 
						|
        }
 | 
						|
        return $res;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Get log file name
 | 
						|
     *
 | 
						|
     * @param const $file
 | 
						|
     *
 | 
						|
     * @return string Filename of logfile
 | 
						|
     */
 | 
						|
    public function getLogfile($file)
 | 
						|
    {
 | 
						|
        switch ($file)
 | 
						|
        {
 | 
						|
            case Log::PHP:
 | 
						|
                $filename = self::PHP_FILE;
 | 
						|
                break;
 | 
						|
            case Log::PERL:
 | 
						|
                $filename = self::PERL_FILE;
 | 
						|
                break;
 | 
						|
            case Log::PERL_COMPLETE:
 | 
						|
                $filename = self::PERL_COMPLETE_FILE;
 | 
						|
                break;
 | 
						|
            case Log::ERROR:
 | 
						|
                $filename = self::ERROR_FILE;
 | 
						|
                break;
 | 
						|
            default:
 | 
						|
                echo "Unknown $file: ".$file;
 | 
						|
                return;
 | 
						|
        }
 | 
						|
        if ($_SESSION['config']['logcompression'] == 1) {
 | 
						|
            $filename .= '.gz';
 | 
						|
        }
 | 
						|
        return $filename;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Delete log file and recreates it.
 | 
						|
     *
 | 
						|
     * @param string $file      Filename
 | 
						|
     *
 | 
						|
     * @return void
 | 
						|
     */
 | 
						|
    public function delete($file)
 | 
						|
    {
 | 
						|
        $filename=Log::getLogfile($file);
 | 
						|
        @unlink($filename);
 | 
						|
        if ($file == Log::PHP) {
 | 
						|
            // re-create main log
 | 
						|
            if (substr($filename, -3) == '.gz') {
 | 
						|
                $log = date('d.m.Y H:i:s') . " Log created.\n";
 | 
						|
                if ($_SESSION['config']['logcompression'] == 1) {
 | 
						|
                    $fp = @gzopen($filename, "wb");
 | 
						|
                    @gzwrite($fp, $log);
 | 
						|
                    @chmod($file . '.gz', 0777);
 | 
						|
                    $this->handle[$file]=$fp;
 | 
						|
                } else {
 | 
						|
                    $fp = @fopen($filename, "wb");
 | 
						|
                    @fwrite($fp, $log);
 | 
						|
                    @chmod($file, 0777);
 | 
						|
                    $this->handle[$file]=$fp;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |