note 97868 deleted from function.shm-get-var by danbrown
| From: | danbrown@php.net | Date: | Thu, 13 May 2010 04:19:10 +0000 |
| Subject: | note 97868 deleted from function.shm-get-var by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-169199@lists.php.net to get a copy of this message | ||
Note Submitter: drclue at DONTSPAMdrclue dot net
----
class shm{// shared memory by name instead of number.
var $shm_permissions=0666;
var $shm_size=2048;
var $shm_key=4096;
var $shm_handle=NULL;
var $aData=Array();
var $aMap=NULL;
var $shm_bSticky=FALSE;
function shm($aParams=Array())
{
$aDef=Array("shm_key"=>4096);
foreach($aDef as $key=>$value)if(!isset($aParams[$key]))
$aParams[$key]=$aDef[$key];
foreach($aParams as $key=>$value)$this->$key=$value;
$this->shm_attach($this->shm_key);
}
function __destruct() {if($this->shm_bSticky===TRUE)
return;$this->shm_detach();}
public function __set($name, $value){$this->shm_put_var($name,$value);}
public function __unset($name){$this->shm_remove_var($name);}
public function __get($name){return $this->shm_get_var($name);}
function shm_get_key($name,$bCreate=TRUE)
{
if($this->shm_handle==NULL)$this->shm_attach() ;
if($this->shm_handle==NULL)return -1 ;
if(isset($this->aMap[$name]))return $this->aMap[$name];
if( shm_has_var($this->shm_handle,0 ))
$this->aMap=shm_get_var($this->shm_handle,0);
else shm_put_var($this->shm_handle,0,
($this->aMap=Array("aMap"=>0)));
if(isset($this->aMap[$name]))return intval($this->aMap[$name]);
if($bCreate==FALSE)return -1;
$this->aMap[$name]=count($this->aMap);
shm_put_var($this->shm_handle,0 ,$this->aMap );
shm_put_var($this->shm_handle,$this->aMap[$name],NULL );
return (intval($this->aMap[$name]));
}
function shm_attach()
{if($this->shm_handle!=NULL)$this->shm_detach();
$this->shm_handle=shm_attach(intval($this->shm_key),
$this->shm_size,0666);
if(shm_has_var($this->shm_handle,0))
$this->aMap=shm_get_var($this->shm_handle,0);
return ($this->shm_handle);}
function shm_detach()
{if($this->shm_handle==NULL)return NULL ;
$result =shm_detach($this->shm_handle) ;
$this->shm_handle =NULL ;
return $result;}
function shm_get_var($name,$bCache=FALSE)
{if(($iKey=$this->shm_get_key($name))==-1)return NULL;
if(!isset($aData[$name]))$bCache=FALSE;
if($bCache===FALSE)
$aData[$name]=shm_get_var($this->shm_handle,$iKey);
return $aData[$name];}
function shm_has_var($name)
{if(($iKey=$this->shm_get_key($name,FALSE))==-1)
return FALSE;return TRUE;}
function shm_put_var($name,$value=NULL)
{if(($iKey=$this->shm_get_key($name,TRUE ))==-1)
return FALSE;
return shm_put_var($this->shm_handle,$iKey,$value);}
function shm_remove_var($name)
{if(($iKey=$this->shm_get_key($name,FALSE))==-1)return TRUE;
unset($this->aMap[$name]);
return shm_remove_var($this->shm_handle,$iKey);}
function shm_list($bCache=FALSE)
{$aList=Array();
if($bCache===TRUE)return $this->aData;
if($this->aMap!=NULL)foreach($this->aMap as $key=>$value)
{if($key=="aMap")continue;$aList[$key]=$this->shm_get_var($key);}
return $aList;}
function shm_remove()
{if($this->shm_handle==NULL)$this->shm_attach();
if($this->shm_handle==NULL)return NULL;
$result =shm_remove($this->shm_handle);
$this->shm_handle=NULL;
$this->aData =NULL;
$this->aMap =NULL;
return $result;}
function kill(){shm_remove($this->shm_handle);}
}// /class shm