问题:希望可以在进程间共享变量,为共享数据提供快速访问

解决方案:除了可以使用APC模块,还可以用shmop或System V共享内存

1 //创建键
2 //将一个可访问的文件路径名转换为一个可供 shmop_open() 和其他系统VIPC keys使用的整数,proj参数必须是一个字符串,这个参数其实就是读写方式
3 
4 //第2个参数传一个字符串, ftok创建一个id
5 $shmop_key = ftok(__FILE__,'b');
6 echo $shmop_key."<br/>";

    创建id    

 1 //创建16384字节共享内存块    0600权限
 2 /*
 3  * 第2个参数
 4  * 模式 “a”,它允许您访问只读内存段
 5  * 模式 “w”,它允许您访问可读写的内存段
 6  * 模式 “c”,它创建一个新内存段,或者如果该内存段已存在,尝试打开它进行读写
 7  * 模式 “n”,它创建一个新内存段,如果该内存段已存在,则会失败
 8  */
 9 $shmop_id = shmop_open($shmop_key,'c',0600,16384);
10 echo $shmop_id."<br/>";

    读取写入

 1 //获取整个共享内存段 后2参数 从第0字节开始读, shmop_size获取$shmop_id的字节大小
 2 $population = shmop_read($shmop_id,0,shmop_size($shmop_id));
 3 
 4 echo $population;
 5 
 6 //处理数据
 7 $births = 3000;
 8 $immigrants = 200;
 9 $deaths = 2800;
10 $emigrants = 300;
11 
12 $population += ($births + $immigrants - $deaths - $emigrants);
13 
14 //将值存回到共享内存段 第3个参数0表示写入的位置
15 $shmop_bytes_written = shmop_write($shmop_id,$population,0);

    关闭资源

1 //关闭句柄
2 shmop_close($shmop_id);

  参考:http://www.ibm.com/developerworks/cn/opensource/os-php-shared-memory/

posted on 2016-05-31 15:30  睡着的糖葫芦  阅读(379)  评论(0编辑  收藏  举报