PHP 8.5.0 Alpha 1 available for testing

shmop_write

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

shmop_writeEscribir en un bloque de memoria compartida

Descripción

shmop_write(Shmop $shmop, string $data, int $offset): int

shmop_write() escribe una cadena en un bloque de memoria compartida.

Parámetros

shmop

El identificador del bloque de memoria compartida, creado por la función shmop_open()

data

Una cadena para escribir en el bloque de la memoria compartida

offset

Especifica la posición desde la cual los datos deben ser escritos en la memoria compartida. El offset debe ser superior o igual a cero e inferior o igual al tamaño real del segmento de memoria compartida.

Valores devueltos

El tamaño de los datos escritos.

Errores/Excepciones

Si offset está fuera de límite, o si un segmento de memoria compartida de solo lectura debe ser escrito, se levanta una ValueError.

Historial de cambios

Versión Descripción
8.0.0 Anterior a PHP 8.0.0, false era devuelto en caso de fallo.
8.0.0 shmop espera ahora una instancia de Shmop; anteriormente se esperaba un resource.

Ejemplos

Ejemplo #1 Escribe un bloque de memoria compartida

<?php
$shm_bytes_written
= shmop_write($shm_id, $my_string, 0);
?>

Este ejemplo escribe los datos de la cadena $my_string en un bloque de memoria compartida. $shm_bytes_written representará el número de bytes escritos.

Ver también

add a note

User Contributed Notes 2 notes

up
0
mark at manngo dot net
2 years ago
On thing you might want to do is replace an old string with a shorter one, or to clear out the string altogether.

To replace the string, you can zero-byte pad the string you are writing:

<?php
// $shmid is from shmop_open()
$size = 128;
$string = 'something';

// write
$string = str_pad(string, $size, "\0");
shmop_write($shmid, $string, 0);

// read
print rtrim(shmop($shmid,0,0),,"\0");

// clear
$string = str_repeat("\0",$size);
shmop_write($shmid, $string, 0);
?>
up
0
radupb at yahoo dot com
4 years ago
I guess pack-unpack are the handy functions for encoding/decoding data as/from a binary string for shmop_write/shmop_read. Example:

$format='LLLLSSCCCC'; //data format for pack
$key=1;
if( !($shmid=shmop_open($key,'n',0660,30)) )
die('shmop_open failed.');

//my data to encode:
$hd=array('ALIVE1'=>1,'ALIVE2'=>2,'ALIVE3'=>3,'ALIVE4'=>4,
'CRTPTR'=>5,'CRTSEQ'=>6,
'CTW'=>7,'LOCK'=>8,'PLAY'=>9,'MISS'=>10
);

$tmp=pack( $format, $hd['ALIVE1'],$hd['ALIVE2'],$hd['ALIVE3'],$hd['ALIVE4'], $hd['CRTPTR'],$hd['CRTSEQ'],$hd['CTW'],$hd['LOCK'],$hd['PLAY'],$hd['MISS'] );

if( ($w=shmop_write($shmid,$tmp,0))!=24 )
die('write error $w='.$w);

And reading from some other process:
$key=1;
if( !($shmid=shmop_open($key,'w',0,0)) )
die('shmop_open failed.');

$formatR='L4ALIVE/SCRTPTR/SCRTSEQ/CCTW/CLOCK/CPLAY/CMISS'; //data format for unpack

$hd=unpack( $formatR, shmop_read( $shmid,0,24) );
echo'hd:<pre>';print_r($hd);echo'</pre>';
To Top