Fork me on GitHub

php 使用共享内存Shmop

php安装共享内存扩展shmop

1.进入php7源码shmop扩展目录

cd /root/php-7.0.12/ext/shmop

phpize

 

./configure --with-php-config=/usr/local/php/bin/php-config

 

make

make install

 

php.ini中添加扩展

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/shmop.so

2.shmop使用用例

创建内存段

shmop_open ($key, $flags, $mode, $size) 函数

创建或打开共享内存块

$key

$flags 访问模式(类似文件的读写权限)

模式 “a”,它允许您访问只读内存段

模式 “w”,它允许您访问可读写的内存段

模式 “c”,它创建一个新内存段,或者如果该内存段已存在,尝试打开它进行读写

模式 “n”,它创建一个新内存段,如果该内存段已存在,则会失败

$mode 内存段的权限

$size 提供内存段大小,以字节为单位。

return 失败返回false,成功返回一个ID编号,其他函数可使用该ID编号操作该共享内存段。

<?php

$systemid = 864; // System ID for the shared memory segment

$mode = "c"; // Access mode

$permissions = 0755; // Permissions for the shared memory segment

$size = 1024; // Size, in bytes, of the segment

$shmid = shmop_open($systemid, $mode, $permissions, $size);

写入数据

shmop_write ($shmid, $data, $offset) 函数

$shmid shmop_open 返回的 ID

$data 要存储的数据(string类型,类型会写入失败)

$offset 数据存储的起始节点

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);

shmop_write($shmid, "Hello World!", 0);

读取数据

shmop_read ($shmid, $start, $count) 函数

$shmid shmop_open 返回的 ID

$start 从内存段读取的位置0表示从头读

$count 读取的数据长度(字节)可以用shmop_size计算大小

<?php

$shmid = shmop_open(864, 'c', 0755, 1024);

$size = shmop_size($shmid);

echo shmop_read($shmid, 0, $size);

删除内存段

shmop_delete ($shmid) 函数

不会实际删除该内存段。它将该内存段标记为删除,因为共享内存段在有其他进程正在使用它时无法被删除。shmop_delete 函数将该内存段标记为删除,阻止任何其他进程打开它。要删除它,我们需要关闭该内存段。

关闭内存段

shmop_close ($shmid) 函数

删除后才会从共享内存中删掉,可使用linux命令$ ipcs -m查看

$ ipcs -m

posted @ 2022-09-10 14:06  v_nice  阅读(344)  评论(0)    收藏  举报
1