<?php  
 
// Кэширование MySQL  запросов посредством сериализации, добавлен страховочный метод на случай если сервер mysql будет не доступен!?// Caching ,  return from alert cahce if mysql server FAILD; 
// BY server@2010 [email protected] 
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");  
 
 
 
 
 
 
 
 
  
 
?>  
 
 |