PHP Classes
elePHPant
Icontem

File: chache_class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Pashkov Denis Igorevich  >  MySQL cache class  >  chache_class.php  >  Download  
File: chache_class.php
Role: Class source
Content type: text/plain
Description: cache class
Class: MySQL cache class
Cache MySQL query results in session variables
Author: By
Last change: now possible return as object
Date: 4 years ago
Size: 4,759 bytes
 

Contents

Class file image Download
<?php

// Кэширование MySQL запросов посредством сериализации, добавлен страховочный метод на случай если сервер mysql будет не доступен!?// Caching , return from alert cahce if mysql server FAILD;
// BY server@2010 pashkovdenis@gmail.com
class cacher {
    private
$cahcedir;
    private
$cahcetime;
    private
$sqlhadler;
    private
$maxmemoryusage;
    private
$userescape;
     private
$handlinm;
    private
$dir;
     private
$hdl;
    private
$flag;
    private
$cutime;
    private
$usecachesystem;


function
__construct($server=array("localhost","root","","base"),$useescape=true,$cp="cp1251",$time=60,$maxmermo=2024){
       
session_id()==false?session_start():null;
       
$this->handlinm=0;
         !empty(
$server[0])?$this->handling_db($server):null;
       
$cp1251=true?@mysql_query("SET NAMES {$cp}"):null;
       
$this->cahcetime=$time;
       
$this->maxmemoryusage=$maxmermo;
       
$this->userescape=$useescape;
       
$this->dir="work_dumps/";
       
$this->cutime=strftime("%J-%H",time());


   


       
//echo $this->cutime;
 
}




private function
handling_db($server){

if(
$this->sqlhadler=@mysql_connect($server[0],$server[1],$server[2])){
        @
mysql_select_db($server[3]); }else{
           
$this->flag='stop';
           
//throw new Exception("Msql Faild");
}
$this->handlinm = 1;


}




private function
bindArrayToObject($array) {

$return = new stdClass();

foreach (
$array as $k => $v) {

if (
is_array($v)) {

$return->$k = $this->bindArrayToObject($v);

}

else {

$return->{$k} = $v;

}

}
return
$return;
}















public function
getpanic($sql){
   
$sql_R='';
   
$result=array();


if(
file_exists($this->dir.substr($sql,0,50).$this->cutime.$this->cutime.".dmps") && strftime("%Y %m %d",filectime($this->dir.substr($sql,0,50).$this->cutime.".dmps"))!==date("Y m d")) $this->clear();


if (
$sql_R=@mysql_query($sql)){

while ($
$sql_R=@mysql_fetch_array($sql_R)){
       
$result[]=$$sql_R;
}
if(!
file_exists($this->dir.substr($sql,0,50).$this->cutime.$this->cutime.".dmps"))
file_put_contents($this->dir.substr($sql,0,50).$this->cutime.".dmps",serialize($result));
return
$result;
////////////

}elseif(file_exists($this->dir.substr($sql,0,50).$this->cutime.".dmps")){

return
unserialize(file_get_contents($this->dir.substr($sql,0,50).$this->cutime.".dmps"));
}else{

throw new
exception("Faild");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public function get($mysql_req,$obj=null){
    if(
$this->flag=='stop') return ;
   
$rest_array=array();
$sql=$mysql_req;

//0637766991

   
if(isset($_SESSION["<sqlc>".$mysql_req]) AND strftime("%M",strtotime(date("h:i:0")))-strftime("%M",$_SESSION[$mysql_req."time"] ) <$this->cahcetime ){

       
$rest=unserialize($_SESSION["<sqlc>".$mysql_req]);
       
//$rest=array_walk($rest,'expld');
          

   
if($obj==1){
    return
$this->bindArrayToObject($rest);
        }else return
$rest;




    }else
    {

        if(
file_exists($this->dir.substr($sql,0,50).$this->cutime.".dmps")){
 
                
                    if(
$obj==1){
    return
$this->bindArrayToObject(unserialize(file_get_contents($this->dir.substr($sql,0,50).$this->cutime.".dmps")));
        }else return
unserialize(file_get_contents($this->dir.substr($sql,0,50).$this->cutime.".dmps"));


            }else{

       


   
$sql= $this->userescape & $this->handlinm ?mysql_real_escape_string($mysql_req):$mysql_req;
    if(
$ret=mysql_query($sql)){
    while(
$reslt=mysql_fetch_array($ret)) $rest_array[]= $reslt;
   
$_SESSION["<sqlc>".$mysql_req]= serialize($rest_array);
   
$_SESSION[$mysql_req."time"] = strtotime(date("h:i:00"));
   
round(memory_get_usage()/1024) >= $this->maxmemoryusage ? $this->clean():null;
   
mysql_free_result($ret) ;
   
file_put_contents($this->dir.substr($sql,0,50).$this->cutime.".dmps",serialize($rest_array));

   
        if(
$obj==1){
    return
$this->bindArrayToObject($rest_array);
        }else return
$rest_array;





    }else
    {
    return
false;
    }
    }
    }




}



public static function
excpth($e){
echo
"<h3 style='color:red;'> Warning New Exception :(( </h3>";
    echo
"<h3> {$e->getMessage() } </h3>";
    echo
"<h3> {$e->getLine() } </h3>";
/////////////////////////////////////////////........

}




public function
sql($mysql_req){
$sql= $this->userescape & $this->handlinm?mysql_real_escape_string($mysql_req):$mysql_req;
if(
$reslt=mysql_query($sql)){
return
$reslt;
}else
{
return
false;
}

}



public function
clean(){

$f=scandir($this->dir);
foreach(
$f as $k){
strstr($k,".dmps")?unlink($this->dir.$k):null;
}

    while(list(
$key,$value)=each($_SESSION)){
        if(
strstr($value,"<sqlc>")){
        unset(
$_SESSION[$key]);}
        }
@
mysql_close($this->sqlhadler);
}
}
 
set_exception_handler("cacher::excpth");








 

?>