PHP 8.4.0 RC4 available for testing

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

Количество байтов для чтения; параметр принимает только значения, которые больше или равны нулю, а сумма offset и size — меньше или равна фактическому размеру сегмента разделяемой памяти. Со значением 0 функция считывает байты по формуле: shmop_size($shmid) - $start.

Возвращаемые значения

Возвращает строковые данные или false, если возникла ошибка.

Ошибки

Если параметр offset или size находятся вне допустимого диапазона, выбрасывается исключение ValueError.

Список изменений

Версия Описание
8.0.0 Параметр shmop ожидает экземпляр Shmop; ранее ожидался ресурс (resource).
8.0.0 Если параметр offset или size находятся вне допустимого диапазона, выбрасывается исключение ValueError; ранее выдавалась ошибка уровня E_WARNING и функция возвращала значение false.

Примеры

Пример #1 Чтение данных из участка разделяемой памяти

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

В приведённом примере выполняется чтение 50 байт из участка разделяемой памяти (идентифицируемого по $shm_id) и размещение в $shm_data.

Смотрите также

  • shmop_write() - Запись данных в разделяемую память

Добавить

Примечания пользователей 4 notes

up
6
Craig Manley
19 years ago
shmop_read() reads and returns the whole memory segment's data. This is not useful if you're just working with strings. If you need to read a string from shared memory, call str_from_mem() on the result of shmop_read(). Similarly when writing strings to memory (instead of binary data), null terminate your strings with str_to_nts() before passing the value on to 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;
}
up
3
macmaster at pobox dot com
23 years ago
When i need to read the whole string at that shm pointer, setting the count parameter to zero (0) seems work for me.
up
1
michael dot wuertz at six dot de
3 years ago
With shmop_read, you probably get a "\0" - padded string.

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

$usable_string = rtrim($zero_padded, "\0");
up
-2
slavapl at mailandnews dot com
23 years ago
Also you can use the shmop_size() function to determine the block size.
To Top