shmop_read

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

shmop_readRead data from shared memory block

说明

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

shmop_read() will read a string from shared memory block.

参数

shmid

The shared memory block identifier created by shmop_open()

start

Offset from which to start reading

count

The number of bytes to read

返回值

Returns the data 或者在失败时返回 FALSE.

更新日志

版本 说明
7.0.0 The type of shmid has been changed from int to resource.

范例

Example #1 Reading shared memory block

<?php
$shm_data 
shmop_read($shm_id050);
?>

This example will read 50 bytes from shared memory block and place the data inside $shm_data.

参见

User Contributed Notes

Milan Cvejic 18-Feb-2009 10:35
You should always serialize data written in shared memory.
And when you are reading data you should always unserialize.

<?php

$data
= 'test';
$shm_bytes_written = shmop_write($shm_id, serialize($data), 0);
$shm_data = unserialize(shmop_read($shm_id, 0, $shm_bytes_written));
?>
Craig Manley 07-Jan-2005 11:19
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;
}
slavapl at mailandnews dot com 02-May-2001 09:15
Also you can use the shmop_size() function to determine the block size.
macmaster at pobox dot com 30-Mar-2001 09:01
When i need to read the whole string at that shm pointer, setting the count parameter to zero (0) seems work for me.