当前位置:首页 > PHP > 正文内容

php共享内存,php共享内存的使用

高老师5年前 (2021-05-18)PHP1023

(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创建的共享内存

共享内存不会因为进程退出而丢失,会一直存在系统中,除非删除它

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/199.html

分享给朋友:

“php共享内存,php共享内存的使用” 的相关文章

PHP模拟并发请求

PHP模拟并发请求

原理:使用curl_init()创建多个请求实例,再使用curl_multi_init()批量执行创建的多个请求实例。文件1:curl.php<?php  $threads=500;//并发请求次数 $url='http://blog.cn/index.php?';...

php引用变量的完全理解

php引用变量的完全理解

在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...

php soap 捕获异常,使用try catch 捕获Soap 异常

php soap 捕获异常,使用try catch 捕获Soap 异常

项目中使用服务来执行webservice,由于对方系统api不稳定,经常导致服务崩溃,只能重启,一个月差不多要重启一次。初期的解决办法是捕获异常,然后continue掉。<?php try {     $url = 'http...

 php监听事件,php触发事件

php监听事件,php触发事件

逛公众号文章看到文章"php实现事件监听与触发的方法,你用过吗?",我就好奇了,php又不是asp.net的webform,哪里来的服务端事件监听。于是学习了一波。先看下监听类:class Event {     /** &nbs...

【二】PHP多进程学习-进程信号管理

【二】PHP多进程学习-进程信号管理

(1).学习目标:    了解常见信号类型(百度PHP支持的信号类型),(2).相关函数学习:    (2.1).pcntl_signal函数用于设置一个信号管理器接收进程信号,参数1:信号类型,参数2:回调函数,用于在接收到参数1类型的信...

posix_ttyname函数详解

posix_ttyname函数详解

posix_ttyname - 获取当前终端设备名称。<?php     var_dump( posix_ttyname(STDOUT) );我们启动一个终端,执行上面的代码输出:/dev/tty1我们再启动一个终端,执行上面的代码输...