這是打算。它返回一個你可以用PHP訪問共享內存塊的ID。這是一個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)的shmid是:1533149226
正如你所看到的,很容易找到:
[[email protected] ~]$ 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正式集成(如果有的話),或者沒有)。如果你根本不感興趣,我會停止更新我的答案。 - 關心Erik。
那麼,文檔沒有說什麼樣的ID返回,它只是說它會返回*一個ID可以使用... *。我不會將文檔解釋爲返回您正在查找的ID。我也猜測細節被抽象掉了,所以我懷疑它可能在本地獲得你正在尋找的ID。 – nickb 2013-05-11 21:13:15