dismiss Step into the future! Click here to switch to the beta php.net site
downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

Introduction> <shm_remove
[edit] Last updated: Fri, 28 Jun 2013

view this page in

Shared Memory



add a note add a note User Contributed Notes Shared Memory - [1 notes]
up
0
makr at makrit dot net
3 months ago
shmop made simple:
$test=get_cache('test');
save_cache($test, 'test1', 600);

To save/get cache that easily just save this as cache.php or whatever you see fit:

<?php

function save_cache($data, $name, $timeout) {
   
// delete cache
   
$id=shmop_open(get_cache_id($name), "a", 0, 0);
   
shmop_delete($id);
   
shmop_close($id);
   
   
// get id for name of cache
   
$id=shmop_open(get_cache_id($name), "c", 0644, strlen(serialize($data)));
   
   
// return int for data size or boolean false for fail
   
if ($id) {
       
set_timeout($name, $timeout);
        return
shmop_write($id, serialize($data), 0);
    }
    else return
false;
}

function
get_cache($name) {
    if (!
check_timeout($name)) {
       
$id=shmop_open(get_cache_id($name), "a", 0, 0);

        if (
$id) $data=unserialize(shmop_read($id, 0, shmop_size($id)));
        else return
false;          // failed to load data

       
if ($data) {                // array retrieved
           
shmop_close();
            return
$data;
        }
        else return
false;          // failed to load data
   
}
    else return
false;              // data was expired
}

function
get_cache_id($name) {
   
// maintain list of caches here
   
$id=array(  'test1' => 1
               
'test2' => 2
               
);

    return
$id[$name];
}

function
set_timeout($name, $int) {
   
$timeout=new DateTime(date('Y-m-d H:i:s'));
   
date_add($timeout, date_interval_create_from_date_string("$int seconds"));
   
$timeout=date_format($timeout, 'YmdHis');

   
$id=shmop_open(100, "a", 0, 0);
    if (
$id) $tl=unserialize(shmop_read($id, 0, shmop_size($id)));
    else
$tl=array();
   
shmop_delete($id);
   
shmop_close($id);

   
$tl[$name]=$timeout;
   
$id=shmop_open(100, "c", 0644, strlen(serialize($tl)));
   
shmop_write($id, serialize($tl), 0);
}

function
check_timeout($name) {
   
$now=new DateTime(date('Y-m-d H:i:s'));
   
$now=date_format($now, 'YmdHis');

   
$id=shmop_open(100, "a", 0, 0);
    if (
$id) $tl=unserialize(shmop_read($id, 0, shmop_size($id)));
    else return
true;
   
shmop_close($id);

   
$timeout=$tl[$name];
    return (
intval($now)>intval($timeout));
}

?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites