<?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");
?>
|