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