Login   Register  
PHP Classes
elePHPant
Icontem

File: class.XLog.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Costin Trifan  >  XLog  >  class.XLog.php  >  Download  
File: class.XLog.php
Role: Class source
Content type: text/plain
Description: The class's source
Class: XLog
Write log messages to PHP or INI files
Author: By
Last change:
Date: 5 years ago
Size: 9,762 bytes
 

Contents

Class file image Download
<?php
/**
* class XLog
*
* The XLog is a PHP 5 oriented object class to log messages into one or multiple files.

* @category   Log
* @author     Costin Trifan <costintrifan@yahoo.com>
* @copyright  2009 Costin Trifan
* @licence    MIT License http://en.wikipedia.org/wiki/MIT_License
* @version    1.0

* Copyright (c) 2009 Costin Trifan <http://june-js.com/>

* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:

* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.

* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
class XLog
{
    private function 
__clone() {}
    private function 
__wakeup() {}

    protected
        
$log_file     '',    # The absolute path to the log file.
        
$message     '',    # The message to write into the log file
        
$line        '',    # The line where the error has occurred [ ie: __LINE__ ]
        
$file         '';    # The file where the error has occurred [ ie: __FILE__ ]

    # Error messages
    
protected
        
$error_file_not_found     "Error: Although you have enabled error logging, the log file could not be found!",
        
$error_file_open         "Error: Couldn't open the log file. Check for permissions!",
        
$error_no_message         "Error: The content to write into the log file is missing...";



    
# .ctor
    /**
    * Constructor
    *
    * @param string $log_file The absolute path to the log file.
    */
    
public function __construct$log_file='' )
    {
        
$this->SetLogFile($log_file);
    }


    
/**
    * Set the active log file.
    *
    * @access private
    * @return void
    */
    
private function SetLogFile$log_file='' )
    {
        if (
$log_file)
            
$this->log_file $log_file;
    }


    
/**
    * Check to see whether or not the log file exists.
    *
    * @access private
    * @return boolean
    */
    
private function FileExists$log_file )
    {
        return 
file_exists($log_file);
    }


    
/**
    * Clear the log file
    */
    
public function Clear$log_file='' )
    {
        if (!
$log_file)
            
$log_file $this->log_file;

        if (!
$this->FileExists($log_file))
            
$this->ExitWithError($this->error_file_not_found);
    
        if ((
$h fopen($log_file"w")) !== FALSE)
            
fclose($h);
        else
            
$this->ExitWithError($this->error_file_open);
    }


    
/**
    * Show the content from the log file
    *
    * @param string $log_file The absolute path to the log file.
    * @return string
    */
    
public function GetContent$log_file='' )
    {
        if (!
$log_file)
            
$log_file $this->log_file;

        if (!
$this->FileExists($log_file))
            
$this->ExitWithError($this->error_file_not_found);

        
# Check if the file is php; if it is, remove php's tags and comments
        
$info pathinfo($log_file);
        
$file_extension  strtoupper($info['extension']);


        if ((
$h = @fopen($log_file"r")) !== FALSE)
        {
            
# Get content
            
$content file_get_contents($log_file);
            @
fclose($h);

            if (
$file_extension == 'PHP')
            {
                
$begin_file '<?php /*';
                
$end_file     '*/ ?>';

                
$content_length     strlen($content);
                
$begin_file_length     strlen($begin_file);
                
$end_file_length     strlen($end_file);
                
# Strip php's tags and comments
                
$content             substr($content$begin_file_length, -$end_file_length);
            }
        }
        return 
html_entity_decode($contentENT_QUOTES"UTF-8");
    }


    
/**
    * Write into the log file
    *
    * @param string $message The message to write into the log file.
    * @param string $file  The file where the error has occurred [ ie: __FILE__ ].
    * @param number $line The line where the error has occurred [ ie: __LINE__ ].
    * @param boolean $clear_before Whether or not to delete the existent content from the log file before writting the new one.
    * @param string $log_file The absolute path to the log file.
    *
    * @return void
    */
    
public function Write($message=''$file=NULL$line=NULL$clear_before=FALSE$log_file='')
    {
        if (!
$message$this->ExitWithError($this->error_no_message);
    
        
# Setup arguments
        
$this->message  htmlentities($messageENT_QUOTES"UTF-8");
        
$this->file        $file;
        
$this->line        $line;
    
        if (
$log_file)
            
$this->log_file $log_file;

        if (!
$this->FileExists($this->log_file))
            
$this->ExitWithError($this->error_file_not_found);

        if (
$clear_before)
            
$this->Clear($this->log_file);

        
# Detect the file's extension so the appropriate function can be called
        
$info pathinfo($this->log_file);
        
$file_extension  strtoupper($info['extension']);

        switch (
$file_extension)
        {
            case 
'INI'     $this->WriteIni(); break;
            case 
'PHP'     $this->WritePhp(); break;
            default     : 
$this->WriteAny(); break;
        }
    }


    
/**
    * Write log into an ini file
    *
    * @access protected
    */
    
protected function WriteIni()
    {
        if ((
$h fopen($this->log_file"r+")) !== FALSE)
        {
            
$initial_content file_get_contents($this->log_file);
        
            
$br "\r\n";
            
$content  $br.";---------------------------------------------------------------------------------------".$br;
            
$content .= "Date \t= ".date("M d Y H:i:s"time()).$br;
            
$content .= "IP \t= ".$_SERVER['REMOTE_ADDR'].$br;
            
$content .= "Page \t= ".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$br;
            
$content .= "File \t= ".$this->file.$br;
            
$content .= "Line \t= ".$this->line.$br;
            
$content .= "Error \t= ".$this->message.$br;
            
$content .= ";---------------------------------------------------------------------------------------".$br;
            
$content .= $br.$initial_content;

            
$content trim($content);
            @
fwrite($h$contentstrlen($content));
            @
fclose($h);
        }
        else 
$this->ExitWithError($this->error_file_open);
    }


    
/**
    * Write log into a php file
    *
    * @access protected
    */
    
protected function WritePhp()
    {
        if ((
$h fopen($this->log_file"r+")) !== FALSE)
        {
            
$br         "\r\n";
            
$begin_file '<?php /*';
            
$end_file     '*/ ?>';

            
$initial_content trim(file_get_contents($this->log_file));

            
$content_length     strlen($initial_content);
            
$begin_file_length     strlen($begin_file);
            
$end_file_length     strlen($end_file);
            
# Strip php's tags and comments
            
$initial_content     substr($initial_content$begin_file_length, -$end_file_length);


            
$content  "[".date("M d Y H:i:s"time())."]".$br;
            
$content .= "---------------------------------------------------------------------------------------".$br;
            
$content .= "IP: \t".$_SERVER['REMOTE_ADDR'].$br;
            
$content .= "Page: \t".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$br;
            
$content .= "File: \t".$this->file.$br;
            
$content .= "Line: \t".$this->line.$br;
            
$content .= "Error: \t".$this->message.$br;
            
$content .= "---------------------------------------------------------------------------------------".$br;
            
$content .= $initial_content;

            
$content trim($content);
            
$content $begin_file.$br.$content.$br.$end_file;
            @
fwrite($h$contentstrlen($content));
            @
fclose($h);
        }
        else 
$this->ExitWithError($this->error_file_open);
    }


    
/**
    * Write log into any other file type
    *
    * @access protected
    */
    
protected function WriteAny()
    {
        if ((
$h fopen($this->log_file"r+")) !== FALSE)
        {
            
$initial_content file_get_contents($this->log_file);
        
            
$br "\r\n";
            
$content  "[".date("M d Y H:i:s"time())."]".$br;
            
$content .= "---------------------------------------------------------------------------------------".$br;
            
$content .= "IP: \t".$_SERVER['REMOTE_ADDR'].$br;
            
$content .= "Page: \t".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].$br;
            
$content .= "File: \t".$this->file.$br;
            
$content .= "Line: \t".$this->line.$br;
            
$content .= "Error: \t".$this->message.$br;
            
$content .= "---------------------------------------------------------------------------------------".$br;
            
$content .= $br.$initial_content;

            
$content trim($content);
            @
fwrite($h$contentstrlen($content));
            @
fclose($h);
        }
        else 
$this->ExitWithError($this->error_file_open);
    }


    
/**
    * Get the size of the log file.
    * Original source code: http://www.php.net/manual/en/function.filesize.php#84034
    *
    * @return string
    */
    
public function GetFileSize$log_file=''$round=$add_space=TRUE)
    {
        if (!
$log_file)
            
$log_file $this->log_file;

        
$size     filesize($log_file);
        
$sizes     = array('B''KB''MB''GB');
        
$total     count($sizes);

        for (
$i=0$size 1024 && $i $total$i++)
            
$size /= 1024;

        if (
$add_space)
            return 
round($size,$round).' '.$sizes[$i];
        else
            return 
round($size,$round).$sizes[$i];
    }


    
/**
    * Display the error message
    *
    * @param string $error_message The message to be displayed in case of an error.
    * @access protected
    * @return void
    */
    
protected function ExitWithError$error_message='' )
    {
        exit(
"<strong>".$error_message."</strong>");
    }

}
// >> END class XLog
?>