(1).基本的写入(a.php)
//(1.1).创建一个IPC通信专用的KEY $shm_key = ftok(__FILE__, 't'); //(1.2).创建或者打开共享内存块,创建1KB $shmop = shmop_open($shm_key, 'c', '0644', 1024); if (!$shmop) { throw new Exception('创建共享内存失败'); } //(1.3).向内存写入数据 $text = 'A:大家好,我是A进程,我创建的内存空间啊,欢迎大家一起来耍啊'; if (!shmop_write($shmop, $text, 0)) { throw new Exception('共享内存写入数据失败'); } //(1.4).用完关闭资源(并不会清除内存数据,只关闭资源句柄) shmop_close($shmop); //(1.5).输出共享内存块的系统ID,我的是1948581891,php打印的是int值,底层用的16进制 echo dechex($shm_key) . PHP_EOL;
(2).基本的读取(b.php)
//(2.1).打开A进程创建的共享内存 $shm_key = 0x74250004; $shmop = shmop_open($shm_key, 'c', '0644', 1024); if (!$shmop) { throw new Exception('打开共享内存失败'); } //(2.2).从内存读取数据 $data = shmop_read($shmop, 0, 1024); file_put_contents('1.txt', $data); echo "b进程读取到的消息为:" . $data . PHP_EOL; //(2.3).删除共享内存.不需要close.直接删除 shmop_delete($shmop);
(3).注意事项
通过ipcs -m 命令可以查看已经创建的共享内存
通过ipcrm -M key 命令可以删除通过shm_key创建的共享内存
共享内存不会因为进程退出而丢失,会一直存在系统中,除非删除它
应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...
逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event { /** &nbs...
php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/** * 获取应用根目录 * @return string */ public static function getRootP...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
最近在公司开发一个新的项目假设项目域名是a.com,需要接入b.com的单点登陆系统。(1).首先我们会在a.com的登陆页面用iframe引入b.com来显示登陆界面,实际上登陆验证操作都是在b.com上面(2).当b.com验证通过,会在前端ajax请求a.com的回调地址,这个回调地址目的就是...