PHP Classes
elePHPant
Icontem

File: boxcache.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Alan Hoffmeister  >  Box Cache  >  boxcache.class.php  >  Download  
File: boxcache.class.php
Role: Class source
Content type: text/plain
Description: Main BoxCache class
Class: Box Cache
Store and retrieve data in cache files
Author: By
Last change: Added some source changes
Date: 4 years ago
Size: 7,136 bytes
 

Contents

Class file image Download
<?php

/*
*Please make sure that you're using the last version by checking http://code.google.com/p/boxcache
 */

class boxcache {

    protected
$path;
    protected
$cache;
    protected
$debug = false;
    protected
$messages = array();
    protected
$autoclean = false;

    public function
__construct($path = null) {
        if (
is_dir($path) && is_writable($path)) {
           
$path = str_replace('\\', '/', $path);
           
$path = (substr($path, -1, 1) == '/') ? $path : $path . '/';
           
$this->path = $path;
           
$this->trowDebug('The script was sucefully configured, your working path is: ' . $path, 2);
        } else {
           
$this->trowDebug('You need to enter a valid and writable path to cache files. The path ' . $path . ' is invalid or not writable.', 1);
        }
    }

    public function
write($name, $data, $expire = null) {
        if (
$this->autoclean == true) {
           
$this->clean();
        }

        if (empty(
$name) || empty($data)) {
           
$this->trowDebug('You are required to enter a valid name for the cache and a valid data to be cached.', 1);
            return
false;
        } else {
           
$cache['filename'] = md5($name);
           
$cache['data'] = base64_encode(serialize($data));
           
$cache['expire'] = empty($expire) ? date('Y-m-d H:i:s', strtotime('+15 minutes')) : date('Y-m-d H:i:s', strtotime($expire));
           
$this->cache = $cache;
           
$caching = $this->putContents();
            if (
$caching == true) {
               
$this->trowDebug($name . ' have been sucefully cached.', 2);
                return
true;
            } else {
               
$this->trowDebug('Something went wrong wen the script tryed to cache ' . $name, 1);
                return
false;
            }
        }
    }

    public function
get($name) {
        if (!empty(
$name)) {
           
$data = $this->getContents(md5($name));
            if (
$data != false) {
               
$data = explode('::', $data);
                if (
$data[0] >= date('Y-m-d H:i:s')) {
                   
$this->trowDebug($name . ' was succefully returned from the cache.', 2, $data[1]);
                    return
unserialize(base64_decode($data[1]));
                } else {
                    if (
file_exists($this->path . $name . '.cache')) {
                       
$this->trowDebug($name . ' has expired, the file ' . $this->path . md5($name) . '.cache' . ' will be deleted now.', 4);
                       
unlink($this->path . md5($name) . '.cache');
                    }
                   
$this->trowDebug($name . ' has expired.', 4);
                    return
false;
                }
            } else {
               
$this->trowDebug('Something went wrong wen the script tryed to get the cache ' . $name, 1);
                return
false;
            }
        } else {
           
$this->trowDebug('The name parameter can\'t be empty.', 1);
            return
false;
        }
    }

    protected function
putContents() {
        if (!
file_exists($this->path . $this->cache['filename'] . '.cache')) {
           
file_put_contents($this->path . $this->cache['filename'] . '.cache', $this->cache['expire'] . '::' . $this->cache['data']);
           
$this->trowDebug($this->cache['filename'] . ' was succefully cached', 2, $this->cache['data']);
            return
true;
        } else {
           
$this->trowDebug('The file ' . $this->path . $this->cache['filename'] . '.cache' . 'already exists, skiping cache.', 4, $this->cache['data']);
            return
false;
        }
    }

    protected function
getContents($name) {
        if (
file_exists($this->path . $name . '.cache')) {
           
$this->trowDebug('The file ' . $this->path . $name . '.cache' . ' have been readed succefully.', 2);
            return
file_get_contents($this->path . $name . '.cache');
        } else {
           
$this->trowDebug('The file ' . $this->path . $name . '.cache' . ' doesn\'t exists, skiping.', 4);
            return
false;
        }
    }

    public function
delete($name) {
        if (
file_exists($this->path . md5($name) . '.cache')) {
           
$this->trowDebug('The file ' . $this->path . md5($name) . '.cache' . ' have been deleted succefully.', 2);
           
unlink($this->path . md5($name) . '.cache');
            return
true;
        } else {
           
$this->trowDebug('The file ' . $this->path . md5($name) . '.cache' . ' doesn\'t exists, skiping.', 4);
            return
false;
        }
    }

    public function
purge() {
       
$files = array_slice(scandir($this->path), 2);
        if (!empty(
$files)) {
            foreach (
$files as $file) {
                if (
file_exists($this->path . $file) && stripos('.cache', $file) != false) {
                   
$this->trowDebug('The file ' . $this->path . $file . ' have been deleted succefully.', 2);
                   
unlink($this->path . $file);
                }
            }
        } else {
           
$this->trowDebug('There is no files to be erased in the work path.', 4);
        }
    }

    public function
clean() {
       
$files = array_slice(scandir($this->path), 2);
        if (!empty(
$files)) {
            foreach (
$files as $file) {
                if (
file_exists($this->path . $file) && stripos('.cache', $file) != false) {
                   
$data = file_get_contents($this->path . $file);
                   
$data = explode('::', $data);
                    if (
$data[0] <= date('Y-m-d H:i:s')) {
                       
$this->trowDebug('The file ' . $this->path . $file . ' have been cleaned succefully.', 2);
                       
unlink($this->path . $file);
                    }
                }
            }
        } else {
           
$this->trowDebug('There is no files to be cleaned in the work path.', 4);
        }
    }

    public function
enableDebug() {
       
$this->debug = true;
       
$this->trowDebug('Debug enabled.', 4);
    }

    public function
disableDebug() {
       
$this->debug = false;
       
$this->trowDebug('Debug disabled.', 4);
    }

    public function
debug() {
        return
$this->messages;
    }

    protected function
trowDebug($msg, $level = 4, $serialize = null) {

       
$levels = array(
           
0 => 'unknown',
           
1 => 'error',
           
2 => 'success',
           
3 => 'warning',
           
4 => 'info'
       
);

        if (!empty(
$msg) && $this->debug == true) {

           
$microseconds = microtime();
           
$microseconds = explode(' ', $microseconds);
           
$microseconds = $microseconds[0];

           
$this->messages[] = array(
               
'level' => array_key_exists($level, $levels) ? $levels[$level] : $levels[0],
               
'message' => $msg,
               
'timestamp' => date('Y-m-d H:i:s') . ' (' . $microseconds . ')',
               
'data' => !empty($serialize) ? serialize($serialize) : null,
            );
        }
    }

}

?>