请教 PHP 的共享内存拓展 shmop 在 windows 下兼容性的问题

2022-05-07 15:42:41 +08:00
 xiaoyanbot
, 相应的代码在 linux 下正常, 我可以在一个 php 进程里进行写入共享内存(比如 php write.php )。这个进程停止了之后,我也可以用 ipcs 命令查看这个共享内存。

另外执行 php read.php 进行读取,也可以正常读取到。

但是到了 win 下 [ win 下存在 shmop.dll 这个拓展,相关文档也说了 shm_* 系列命令,win 下可用]

只有读取和写入在一个 文件 的时候,才可以正常访问到。 分散到两个文件,无论是 网页形式( cgi 形式)还是 cli 形式,比如前面的 php *.php 执行的方式,均读取不出来存储在共享内存的内容


尝试看 php-src 的代码,没看出来怎么回事。


所以请教下各位大神, 在 win 下这个拓展可以正常实现吗? 或者 http://www.04007.cn/article/131.html 这篇文章里提到的, 我没有复现。 我复现的时候,第二个读取的 php 文件读取不到信息
536 次点击
所在节点    问与答
3 条回复
xiaoyanbot
2022-05-07 15:55:40 +08:00
write.php

<?php
$id = shmop_open(0,'c',0644,256);
$re = shmop_write($id,'haha',0);

var_dump(shmop_read($id,0,50));



read.php

<?php
$id = shmop_open(0,'c',0644,256);
$re = shmop_read($id,0,50);
echo strlen($re);
echo '###';
echo strlen(trim($re));
echo '###';

var_dump(shmop_read($id,0,50));



win 下,
在 fastcgi 网页模式下,无法读取到
cli 命令执行模式下,也无法读取到


请教这是正常的吗? 为什么这篇博客里,说 win 下是可以的呢? http://www.04007.cn/article/131.html
xiaoyanbot
2022-05-07 17:45:44 +08:00
目前发现在 网页模式下,PHP 7.0 可以; PHP 7.4 以上版本就不可以了
xiaoyanbot
2022-05-07 17:52:18 +08:00
@xiaoyanbot

网页模式下,PHP 7.2 可以; PHP 7.2 以上版本就不可以了。 在看 php-src 源码, 这期间 ext/shmop.c 源码发生了什么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851393

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX