以下是如何使用一个共享内存块存储多个变量或数组的示例。不幸的是,为了存储多个变量,您必须多次使用 sem_get()。shm_attach()、shm_put_var() 和 shm_get_var() 也是如此。
#!/usr/local/bin/php -q
<?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);
?>
要真正测试它.. 创建第二个脚本,如下所示并运行它..
#!/usr/local/bin/php -q
<?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);
?>
正如你所看到的,test2.php 没有向共享内存插入任何内容.. 但它却提取了 3 个已经存储的不同数组..
希望这有帮助.. 我花了点时间才弄明白.. 似乎每个人都有自己关于如何使用 shm 的想法。哈哈。
顺便说一句,老实说,我不确定 ftok 是如何工作的,因为我没有更改 __FILE__ 以匹配 test.php 的文件路径或任何其他内容.. 我认为文件路径必须完全相同才能正常工作.. 哦,好吧,它按原样工作了!哈哈..
- Cecil