php 共享内存学习(shmop函数)

时间:2023-03-09 01:48:38
php 共享内存学习(shmop函数)

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

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

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

    创建id    

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

    读取写入

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

    关闭资源

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

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