Login   Register  
PHP Classes
elePHPant
Icontem

File: fileStorage.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Emilis Dambauskas  >  fileStorage  >  fileStorage.php  
File: fileStorage.php
Role: Class source
Content type: text/plain
Description: class file
Class: fileStorage
Simple class for keeping data in a file
 

Contents

Class file image Download
<?php
/*****************************************************************************
 * fileStorage: easy to use class for writing and reading serialized data from
 *              and to files
 *****************************************************************************
 * version 1.0 - 2002-09-12 12:15
 *****************************************************************************
 * Copyright (c) 2002, Emilis Dambauskas, emilis@gildjia.lt
 * All rights reserved.
 * This class is licensed under The Artistic license, for more info read 
 * fileStorage.license.txt or go to 
 * http://www.opensource.org/licenses/artistic-license.php
 ****************************************************************************/

/*****************************************************************************
 * HELP:
 * methods:
 * - fileStorage($filename) - contructor
 * - error($msg) - reports an error
 * - read_data() - reads data from file
 * - write_data() - writes data to file
 * - add_data($name, $value) - adds new value into data storage
 * - get_data($name) - gets value from data storage
 * - register_data($name, &$value) - adds reference into data storage
 * - &get_reg_data($name) - gets reference from data storage
 *
 * ATTENTION:
 *   if you want to store data in a file it has to be accessible for writing
 *   by the web server. So you may need to chmod the file and change its
 *   access permissions.
 ****************************************************************************/

/*****************************************************************************
 * EXAMPLE (a simple counter stored in the storage):
 * 
 * // we create new storage and associate it with file mydata.dat:
 * $storage = &new fileStorage('mydata.dat');
 * $storage->read_data();
 * 
 * // try to get counter value from storage
 * $counter = $storage->get_data('counter');
 * 
 * // if counter not found:
 * if (!$counter)
 *    $counter = 1;
 * 
 * // increase counter value:
 * $counter++;
 *
 * // store counter value in the storage:
 * $storage->add_data('counter', $counter)
 * // save storage:
 * $storage->write_data();
 * 
 * 
 ****************************************************************************/

class fileStorage
{
    var 
$fp;
    var 
$filename;
    var 
$data;
    var 
$data_read;
    
    
/**
     * constructor
     *
     * $filename = name of file to use for storing data
     */
    
function fileStorage($filename)
    {
        
$this->filename $filename;
        
$this->data_read FALSE;
        
$this->data = array();
    } 
// end of function fileStore
    
    /**
     * reports an error
     * tip: you ca attach your own error reporting here
     */
    
function error($msg)
    {
        
trigger_error('fileStorage error: '.$msg);
    } 
// end of function error
    
    
    /**
     * checks if file exists
     * if not tries to create it
     */
    
function _check_file()
    {
        if (!
file_exists($this->filename))
                if(!
$this->fp fopen($this->filename'w'))
                        return 
FALSE;
                else
                        
fclose($this->fp);
        return 
TRUE;
    } 
// end of function _check_file
    
    /**
     * reads the file and returns array with data
     */
    
function read_data()
    {
        if (!
$this->_check_file())
        {
            
$this->error('Couldnot open file '.$this->filename.' for reading.');
            return 
FALSE;
        }
                
        
$this->fp fopen ($this->filename'r');
        
$contents fread ($this->fpfilesize ($this->filename));
        
fclose ($this->fp); 
        
$this->data unserialize($contents);
        
$this->data_read TRUE;
        
        return 
$this->data;
    } 
// end of function get_data
    
    /**
     * writes data into the file
     */
    
function write_data()
    {
        if (!
$this->_check_file())
        {
            
$this->error('Couldnot open file '.$this->filename.' for writing.');
            return 
FALSE;
        }
        
        
$store serialize($this->data);
        
$this->fp fopen($this->filename'w');
        
fwrite($this->fp$store);
        
fclose($this->fp);
    } 
// end of function write_data
    
    
    /**
     * adds variable into storage
     */
    
function add_data($name$value)
    {
        if (!
$this->data_read)
                
$this->read_data();
        
        
$this->data[(string) $name] = $value;
    } 
// end of function add_data
    
    /**
     * returns data stored in storage by that name
     */
    
function get_data($name)
    {
        if (!
$this->data_read)
                
$this->read_data();
        
        if (!isset(
$this->data[(string)$name]))
        {
            
$this->error('Data '.$name.' does not exist in the storage');
            return 
FALSE;
        }
        return 
$this->data[(string)$name];
    } 
// end of function get_data
    
    /**
     *
     */
    
function register_data($name, &$value)
    {
        if (!
$this->data_read)
                
$this->read_data();
        
        
$this->data[(string) $name] = &$value;
    }
    
    
/**
     *
     */
    
function &get_reg_data($name)
    {
        if (!
$this->data_read)
                
$this->read_data();
        
        if (!isset(
$this->data[(string)$name]))
        {
            
$this->error('Data '.$name.' does not exist in the storage');
            return 
FALSE;
        }
        return 
$this->data[(string)$name];
    }

// end of class fileStorage

?>