启用php的共享内存:
1).windows下,php.ini中取消 ;extension=php_shmop.dll 这行的行首分号,加载shmop扩展。
2) .linux/unix下,重新编译php,加入--enable--shmop 选项。
Shared Memory 的函数解释如下:
- shmop_close — Close shared memory block
- shmop_delete — Delete shared memory block
- shmop_open — Create or open shared memory block
- shmop_read — Read data from shared memory block
- shmop_size — Get size of shared memory block
- shmop_write — Write data into shared memory block
测试代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php /* * @文件: create.php * @功能:将全局变量写入共享内存中 */ //定义全局变量 $super = "hello world"; //申请100字节共享内存空间 $shm_id = shmop_open(0xff3, "c", 0644, 100); if (!$shm_id) { echo "申请空间失败<br>"; } //内容写入共享内存空间 if (shmop_write($shm_id, $super, 0)) { echo "全局变量已经写入共享内存<br>"; } else { echo "写入共享内存失败<br>"; } //关闭共享内存空间 shmop_close($shm_id); ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php /* * @文件: read.php * @功能:读取共享内存中的内容 */ //读100字节共享内存空间 $shm_id = shmop_open(0xff3, "a", 0644, 100); //获取共享内存空间中的前11个字节的内容 //create.php中 $super 变量长度为11 $share = shmop_read($shm_id, 0, 11); echo $share; //关闭 shmop_close($shm_id); ?> |
测试方法:浏览过 create.php 页面,只要 HTTP 服务不关,以后每打开 read.php 就能读取到共享内存中的 "hello world"。还有一种测试办法,在 create.php 后加个 while(true){} 让脚本不会退出,第一个 dos 窗口执行 php create.php,然后在别的窗口中执行 php read.php 就能在控制台下输出 "hello world"。
参考:http://blog.csdn.net/johnpanq/archive/2005/12/29/564818.aspx
本文链接 https://yanbin.blog/php-share-memory-cross-proces/, 来自 隔叶黄莺 Yanbin Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。