note 40886 added to function.shm-attach
| From: | Cecil at rn2 dot php dot net | Date: | Thu, 18 Mar 2004 05:37:54 +0000 |
| Subject: | note 40886 added to function.shm-attach | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-66998@lists.php.net to get a copy of this message | ||
Here is an example of how to use one shared memory block to store multiple variables or arrays..
unfortunetly in order to store more than ONE variable, you have to use sem_get() multiple times..
same goes for shm_attach(), shm_put_var() and shm_get_var()
#!/usr/local/bin/php -q
<?PHP
// test.php
$SHM_KEY = ftok(__FILE__,'A');
$shmid = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$shmid2 = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$shmid3 = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$data = shm_attach($shmid, 1024);
$data2 = shm_attach($shmid2, 1024);
$data3 = shm_attach($shmid3, 1024);
$test = array("hello","world","1","2","3");
$test2 = array("hello","world","4","5","6");
$test3 = array("hello","world","7","8","9");
shm_put_var($data,$inmem,$test);
shm_put_var($data2,$inmem2,$test2);
shm_put_var($data3,$inmem3,$test3);
print_r(shm_get_var($data,$inmem));
print_r(shm_get_var($data2,$inmem2));
print_r(shm_get_var($data3,$inmem3));
shm_detach($data);
shm_detach($data2);
shm_detach($data2);
?>
to REALLY test it.. create a second script like so and run it..
#!/usr/local/bin/php -q
<?PHP
// test2.php
$SHM_KEY = ftok(__FILE__,'A');
$shmid = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$shmid2 = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$shmid3 = sem_get($SHM_KEY, 1024, 0644 | IPC_CREAT);
$data = shm_attach($shmid, 1024);
$data2 = shm_attach($shmid2, 1024);
$data3 = shm_attach($shmid3, 1024);
print_r(shm_get_var($data,$inmem));
print_r(shm_get_var($data2,$inmem2));
print_r(shm_get_var($data3,$inmem3));
shm_detach($data);
shm_detach($data2);
shm_detach($data2);
?>
As you can see, test2.php doesn't insert anything into shared memory.. yet it pulls out 3
totally different arrays already stored..
Hope that helps.. took me a bit to get it right.. everyone seems to have their own idea of how shm
should be used. lol.
BTW, not sure how the ftok works to be honest, cause I didn't change the __FILE__ to match the
file path of test.php or anything.. I would think that the file path out have to be the exact same
to work correctly.. oh well, it worked as-is! haha..
- Cecil
----
Manual Page -- http://www.php.net/manual/en/function.shm-attach.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+40886
Delete -- http://master.php.net/manage/user-notes.php?action=delete+40886&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+40886&report=yes
Search -- http://master.php.net/manage/user-notes.php