PHP Classes

File: file.class.php

Recommend this page to a friend!
  Classes of Sven Wagener   File class   file.class.php   Download  
File: file.class.php
Role: Class source
Content type: text/plain
Description: Base file class
Class: File class
File manipulation and form upload handling
Author: By
Last change: Added search() function.
Returns pointer offsets where string have been found in file.

Date: 20 years ago
Size: 7,362 bytes
 

Contents

Class file image Download
<?
/**
* File handling class
*
* @author Sven Wagener <wagener_at_indot_dot_de>
* @include Funktion:_include_
*
*/
class file{
    var
$file;
    var
$binary;
    var
$name;
    var
$size;
   
    var
$debug;
    var
$action_before_reading=false;
   
   
/**
    * Constructor of class
    * @param string $filename The name of the file
    * @param boolean $binarty Optional. If file is a binary file then set TRUE, otherwise FALSE
    * @desc Constructor of class
    */
   
function file($filename,$binary=false){
       
$this->name=$filename;
       
$this->binary=$binary;
       
        if(
$binary){
           
$this->file=@fopen($filename,"a+b");
            if(!
$this->file){
               
$this->file=@fopen($filename,"rb");
            }
        }else{
           
$this->file=@fopen($filename,"a+");
            if(!
$this->file){
               
$this->file=@fopen($filename,"r");
            }
        }
    }
   
   
/**
    * Returns the filesize in bytes
    * @return int $filesize The filesize in bytes
    * @desc Returns the filesize in bytes
    */
   
function get_size(){
        return
filesize($this->name);
    }
   
   
/**
    * Returns the timestamp of the last change
    * @return timestamp $timestamp The time of the last change as timestamp
    * @desc Returns the timestamp of the last change
    */
   
function get_time(){
        return
fileatime($this->name);
    }
   
   
/**
    * Returns the filename
    * @return string $filename The filename
    * @desc Returns the filename
    */
   
function get_name(){
        return
$this->name;
    }
   
   
/**
    * Returns user id of the file
    * @return string $user_id The user id of the file
    * @desc Returns user id of the file
    */
   
function get_owner_id(){
        return
fileowner($this->name);
    }
   
   
/**
    * Returns group id of the file
    * @return string $group_id The group id of the file
    * @desc Returns group id of the file
    */
   
function get_group_id(){
        return
filegroup($this->name);
    }
   
   
/**
    * Returns the suffix of the file
    * @return string $suffix The suffix of the file. If no suffix exists FALSE will be returned
    * @desc Returns the suffix of the file
    */
   
function get_suffix(){
       
$file_array=split("\.",$this->name); // Splitting prefix and suffix of real filename
       
$suffix=$file_array[count($file_array)-1]; // Returning file type
       
if(strlen($suffix)>0){
            return
$suffix;
        }else{
            return
false;
        }
    }
   
   
/**
    * Sets the actual pointer position
    * @return int $offset Returns the actual pointer position
    * @desc Returns the actual pointer position
    */
   
function pointer_set($offset){
       
$this->action_before_reading=true;
        return
fseek($this->file,$offset);
    }
   
   
/**
    * Returns the actual pointer position
    * @param int $offset Returns the actual pointer position
    * @desc Returns the actual pointer position
    */
   
function pointer_get(){
        return
ftell($this->file);
    }
   
   
/**
    * Reads a line from the file
    * @return string $line A line from the file. If is EOF, false will be returned
    * @desc Reads a line from the file
    */
   
function read_line(){
        if(
$this->action_before_reading){
            if(
rewind($this->file)){
               
$this->action_before_reading=false;
                return
fgets($this->file);
            }else{
               
$this->halt("Pointer couldn't be reset");
                return
false;
            }
        }else{
            return
fgets($this->file);
        }
    }
   
   
/**
    * Reads data from a binary file
    * @return string $line Data from a binary file
    * @desc Reads data from a binary file
    */
   
function read_bytes($bytes,$start_byte=0){
        if(
is_int($start_byte)){
            if(
rewind($this->file)){
                if(
$start_byte>0){
                   
$this->pointer_set($start_byte);
                    return
fread($this->file,$bytes);
                }else{
                    return
fread($this->file,$bytes);
                }
            }else{
               
$this->halt("Pointer couldn't be reset");
                return
false;
            }
        }else{
           
$this->halt("Start byte have to be an integer");
            return
false;
        }
    }
   
   
/**
    * Writes data to the file
    * @param string $data The data which have to be written
    * @return boolean $written Returns TRUE if data could be written, FALSE if not
    * @desc Writes data to the file
    */
   
function write($data){
       
$this->action_before_reading=true;
        if(
strlen($data)>0){
            if(
$this->binary){
               
$bytes=fwrite($this->file,$data);
                if(
is_int($bytes)){
                    return
$bytes;
                }else{
                   
$this->halt("Couldn't write data to file, please check permissions");
                    return
false;
                }
            }else{
               
$bytes=fputs($this->file,$data);
                if(
is_int($bytes)){
                    return
$bytes;
                }else{
                   
$this->halt("Couldn't write data to file, please check permissions");
                    return
false;
                }
            }
        }else{
           
$this->halt("Data must have at least one byte");
        }
    }
   
   
/**
    * Copies a file to the given destination
    * @param string $destination The new file destination
    * @return boolean $copied Returns TRUE if file could bie copied, FALSE if not
    * @desc Copies a file to the given destination
    */
   
function copy($destination){
        if(
strlen($destination)>0){
            if(
copy($this->name,$destination)){
                return
true;
            }else{
               
$this->halt("Couldn't copy file to destination, please check permissions");
                return
false;
            }
        }else{
           
$this->halt("Destination must have at least one char");
        }
    }
   
   
/**
    * Searches a string in file
    * @param string $string The string which have to be searched
    * @return array $found_bytes Pointer offsets where string have been found. On no match, function returns false
    * @desc Searches a string in file
    */
   
function search($string){
        if(
strlen($string)!=0){
           
           
$offsets=array();
           
           
$offset=$this->pointer_get();
           
rewind($this->file);
           
           
// Getting all data from file
           
$data=fread($this->file,$this->get_size());
           
           
// Replacing \r in windows new lines
           
$data=preg_replace("[\r]","",$data);
           
           
$found=false;
           
$k=0;
           
            for(
$i=0;$i<strlen($data);$i++){
               
               
$char=$data[$i];
               
$search_char=$string[0];
               
               
// If first char of string have been found and first char havn't been found
               
if($char==$search_char && $found==false){
                   
$j=0;
                   
$found=true;
                   
$found_now=true;
                }
               
               
// If beginning of the string have been found and next char have been set
               
if($found==true && $found_now==false){
                   
$j++;
                   
// If next char have been found
                   
if($data[$i]==$string[$j]){
                       
// If complete string have been matched
                       
if(($j+1)==strlen($string)){
                           
$found_offset=$i-strlen($string)+2;
                           
$offsets[$k++]=$found_offset;
                        }
                    }else{
                       
$found=false;
                    }
                   
                }
               
               
$found_now=false;
            }
           
           
$this->pointer_set($offset);
           
            return
$offsets;
        }else{
           
$this->halt("Search String have to be at least 1 chars");
        }
    }
   
   
/**
    * Prints out a error message
    * @param string $message all occurred errors as array
    * @desc Returns all occurred errors
    */
   
function halt($message){
        if(
$this->debug){
           
printf("File error: %s\n", $message);
            if(
$this->error_nr!="" && $this->error!=""){
               
printf("MySQL Error: %s (%s)\n",$this->error_nr,$this->error);
            }
            die (
"Session halted.");
        }
    }
   
   
/**
    * Switches to debug mode
    * @param boolean $switch
    * @desc Switches to debug mode
    */
   
function debug_mode($debug=true){
       
$this->debug=$debug;
        if(!
$this->file){
           
$this->halt("File couln't be opened, please check permissions");
        }
    }
}
?>