(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 arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。(1).创建一个学生类,并且实现arrayaccess 接口。<?php class studen...
最近在编写windows php多线程的东西,从官网下载了PHP的线程安全版,尝试开启curl扩展extension=php_curl.dllphp -m 却提示 PHP Startup: Unable to load dynamic library 'C:\php\ext\php_curl...
有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...
本人在windows下创建多进程的研究,唯一缺点,主进程所在终端关闭则所有子进程全部关闭。原理是通过proc_open创建多进程,通过环境变量识别父子进程,还能通过proc_open进行父子进程通信<?php namespace EasyTask; use \Except...
有时候我们拿到一个PHP数组变量,想要将这个数组的代码结构复制出来方便调试可以使用,直接将输出结果复制作为定义数组的代码。经常用,但是记不住,我们专门留在博客方便自己查询。<?php $data = [ 'id'=>10001, 'nam...
假如我们使用curl请求一个网站,如果这个网站域名在本地host中也存在,curl默认会请求本地,但是我们可以自己设置解析到哪个ip。(1).设置朋友的博客网站主机和ip,请求测试正确返回远程网站内容<?php $ip = '47.106.110.119'...