PHP Conference Nagoya 2025

shmop_write

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

shmop_writeEscreve dados em um bloco de memória compartilhada

Descrição

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

shmop_write() escreve uma string em um bloco de memória compartilhada.

Parâmetros

shmop

O identificador do bloco de memória compartilhada criado por shmop_open().

data

Uma string a ser escrita em um bloco de memória compartilhada.

offset

Posição onde se deve iniciar a escrita de dados dentro do segmento de memória compartilhada. A posição deve ser maior ou igual a zero e menor ou igual ao tamanho real do segmento de memória compartilhada.

Valor Retornado

O tamanho dos dados do parâmetro data escritos.

Erros/Exceções

Se offset estiver fora do intervalo, ou se houver tentativa de escrita em um segmento de memória compartilhada somente-leitura, um ValueError é lançado.

Registro de Alterações

Versão Descrição
8.0.0 Antes do PHP 8.0.0, false era retornado em caso de falha.
8.0.0 shmop agora espera uma instância de Shmop; anteriormente, esperava um resource.

Exemplos

Exemplo #1 Escrevendo no bloco de memória compartilhada

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

Esse exemplo irá escrever dados dentro de $my_string em um bloco de memória compartilhada, $shm_bytes_written conterá o número de bytes escritos.

Veja Também

  • shmop_read() - Lê dados do bloco de memória compartilhada

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
0
mark at manngo dot net
1 year 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