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));
}
?>| CARVIEW |
Select Language
HTTP/2 301
server: myracloud
date: Fri, 26 Dec 2025 13:24:36 GMT
content-type: text/html
content-length: 161
location: https://www.php.net/shmop
HTTP/2 200
server: myracloud
date: Fri, 26 Dec 2025 13:24:37 GMT
content-type: text/html; charset=utf-8
content-language: en
permissions-policy: interest-cohort=()
x-frame-options: SAMEORIGIN
status: 200 OK
link: ; rel=shorturl
last-modified: Fri, 26 Dec 2025 12:08:27 GMT
vary: accept-encoding
content-encoding: gzip
expires: Fri, 26 Dec 2025 13:24:37 GMT
cache-control: max-age=0
PHP: Shared Memory - Manual
update page now
Shared Memory
- Introduction
- Installing/Configuring
- Examples
- Shared Memory Functions
- shmop_close — Close shared memory block
- shmop_delete — Delete shared memory block
- shmop_open — Create or open shared memory block
- shmop_read — Read data from shared memory block
- shmop_size — Get size of shared memory block
- shmop_write — Write data into shared memory block
- Shmop — The Shmop class
+add a note
User Contributed Notes 2 notes
makr at makrit dot net ¶
12 years ago
mattcsl at gmail dot com ¶
12 years ago
thankyou,
this function had a missing comma between test1 and test2 and is fixed below
function get_cache_id($name) {
// maintain list of caches here
$id=array( 'test1' => 1,
'test2' => 2
);
return $id[$name];
}
↑ and ↓ to navigate •
Enter to select •
Esc to close • / to open
Press Enter without
selection to search using Google