这是有意的。它返回一个 id,您可以在 PHP 中使用它来访问共享内存块。这是一个 shmop 资源,您可以在这里看到:http: //php.net/manual/en/resource.php
要弄清楚它是哪一个,请使用您自己的密钥而不是 0。我写了一个简单的示例:
<?php
echo "Opening shared memory!\n";
if($shm_id = shmop_open(0xdeadbeef, 'c', 0666, 1024)) {
echo "Opened shared memory\n";
echo "Wrote " . shmop_write($shm_id, "Testing", 0) . " bytes.\n";
echo shmop_read($shm_id, 0, 7) . "\n";
var_dump($shm_id);
echo $shm_id . "\n";
$line = `ipcs -m |grep deadbeef`;
list($null, $shmid, $null) = explode(' ', $line);
echo "shmid is: " . $shmid . "\n";
}
?>
输出:
打开共享内存!打开共享内存写了7个字节。测试 int(4) 4 shmid 是:1533149226
如您所见,很容易找到:
[nedwidek@yule ~]$ ipcs -m |grep deadbeef
0xdeadbeef 1533149226 nedwidek 666 1024 0
只是我所追求的更新:
来自 php-src/ext/shmop/shmop.c ( https://github.com/php/php-src/blob/master/ext/shmop/shmop.c )
rsid = zend_list_insert(shmop, shm_type TSRMLS_CC);
RETURN_LONG(rsid);
这里有两件事.... 验证您是否获得了资源 id 并且 shmop 结构是持久的。这意味着可以得到shmod->shmid。
我还订阅了内部邮件列表。我将发布一个关于他们为什么不允许你获取 shmid 的查询,如果引入了一个函数来获取它(或者可能是作为哈希数组的 shmop 详细信息),他们是否会为此合并一个补丁。
让我知道您对此的兴趣程度(合作开发补丁,接收我提出的任何补丁,等待 PHP 正式集成(如果有的话),或者没有)。如果您根本不感兴趣,我将停止更新我的答案。——问候埃里克。