V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaoyanbot
V2EX  ›  问与答

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

  •  
  •   xiaoyanbot · 2022-05-07 15:42:41 +08:00 · 524 次点击
    这是一个创建于 729 天前的主题,其中的信息可能已经有所发展或是发生改变。
    , 相应的代码在 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 文件读取不到信息
    xiaoyanbot
        1
    xiaoyanbot  
    OP
       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
        2
    xiaoyanbot  
    OP
       2022-05-07 17:45:44 +08:00
    目前发现在 网页模式下,PHP 7.0 可以; PHP 7.4 以上版本就不可以了
    xiaoyanbot
        3
    xiaoyanbot  
    OP
       2022-05-07 17:52:18 +08:00
    @xiaoyanbot

    网页模式下,PHP 7.2 可以; PHP 7.2 以上版本就不可以了。 在看 php-src 源码, 这期间 ext/shmop.c 源码发生了什么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1016 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 80ms · UTC 23:11 · PVG 07:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.