2024 年 PHP 日本研討會

shmop_read

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

shmop_read從共享記憶體區塊讀取資料

說明

shmop_read(Shmop $shmop, int $offset, int $size): string

shmop_read() 將從共享記憶體區塊讀取一個字串。

參數

shmop

shmop_open() 建立的共享記憶體區塊識別碼

偏移量 (offset)

開始讀取的偏移量;必須大於或等於零,且小於或等於共享記憶體區段的實際大小。

大小 (size)

要讀取的位元組數;必須大於或等於零,且 offsetsize 的總和必須小於或等於共享記憶體區段的實際大小。 0 會讀取 shmop_size($shmid) - $start 個位元組。

回傳值

成功時返回資料,失敗時返回 false

錯誤/例外

如果 offsetsize 超出範圍,則會拋出 ValueError

更新日誌

版本 說明
8.0.0 shmop 現在需要一個 Shmop 實例;先前需要的是 資源
8.0.0 如果 offsetsize 超出範圍,則會拋出 ValueError;先前會發出 E_WARNING,並返回 false

範例

範例 #1 讀取共享記憶體區塊

<?php
$shm_data
= shmop_read($shm_id, 0, 50);
?>

此範例將從共享記憶體區塊讀取 50 個位元組,並將資料放入 $shm_data 中。

參見

新增筆記

使用者貢獻的筆記 4 則筆記

Craig Manley
19 年前
shmop_read() 會讀取並返回整個記憶體區段的資料。如果您只是在處理字串,這沒有用。如果您需要從共享記憶體讀取字串,請對 shmop_read() 的結果呼叫 str_from_mem()。同樣地,在將字串寫入記憶體時(而不是二進位資料),請使用 str_to_nts() 將字串以 null 終止,再將值傳遞給 shmop_write()。

function str_to_nts($value) {
return "$value\0";
}

function str_from_mem(&$value) {
$i = strpos($value, "\0");
if ($i === false) {
return $value;
}
$result = substr($value, 0, $i);
return $result;
}
macmaster at pobox dot com
23 年前
當我需要讀取該 shm 指標上的整個字串時,將 count 參數設定為零 (0) 似乎對我有效。
michael dot wuertz at six dot de
3 年前
使用 shmop_read,您可能會得到一個以 "\0" 填充的字串。

$zero_padded = shmop_read($shm_seg, 0, 128);

$usable_string = rtrim($zero_padded, "\0");
slavapl at mailandnews dot com
23 年前
您也可以使用 shmop_size() 函式來決定區塊大小。
To Top