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 实例;以前,期望的是一个 resource
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()。类似地,当将字符串写入内存(而不是二进制数据)时,在将值传递给 shmop_write() 之前,使用 str_to_nts() 为字符串添加 null 终止符。

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指针处的整个字符串时,将计数参数设置为零(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