The PHP Online Conference 2021


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

shmop_readLeer datos desde un segmento de memoria compartida


shmop_read ( resource $shmid , int $start , int $count ) : string

shmop_read() leerá una cadena desde un segmento de memoria compartida.



El identificador del segmento de memoria compartida creado por shmop_open()


Offset desde el que comenzar a leer


El número de bytes a leer. 0 lee shmop_size($shmid) - $start bytes.

Valores devueltos

Devuelve los datos o FALSE en caso de error.

Historial de cambios

Versión Descripción
7.0.0 El tipo de shmid ha sido cambiado de int a resource.


Ejemplo #1 Lectura de un segmento de memoria compartida


Este ejemplo, leerá los 50 primeros bytes del segmento de memoria compartida y almacenará los datos en la variable $shm_data.

Ver también

  • shmop_write() - Escribir datos en un segmento de memoria compartida

add a note add a note

User Contributed Notes 4 notes

Craig Manley
15 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;
macmaster at pobox dot com
19 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.
slavapl at mailandnews dot com
19 years ago
Also you can use the shmop_size() function to determine the block size.
Milan Cvejic
11 years ago
You should always serialize data written in shared memory.
And when you are reading data you should always unserialize.


= 'test';
$shm_bytes_written = shmop_write($shm_id, serialize($data), 0);
$shm_data = unserialize(shmop_read($shm_id, 0, $shm_bytes_written));
To Top