shmop_write

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

shmop_write — Écrire dans un bloc de mĂ©moire partagĂ©e

Description

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

shmop_write() écrit une chaßne dans un bloc de mémoire partagée.

Liste de paramĂštres

shmop
L'identifiant du bloc mémoire partagé, créé par la fonction shmop_open()
data
Une chaßne à écrire dans le bloc de la mémoire partagée
offset
SpĂ©cifie la position Ă  partir de laquelle les donnĂ©es doivent ĂȘtre Ă©crites dans la mĂ©moire partagĂ©e. L'offset doit ĂȘtre supĂ©rieur ou Ă©gal Ă  zĂ©ro et infĂ©rieur ou Ă©gal Ă  la taille rĂ©elle du segment de mĂ©moire partagĂ©e.

Valeurs de retour

La taille des données écrites.

Erreurs / Exceptions

Si offset est hors limite, ou si un segment de mĂ©moire partagĂ©e en lecture seule doit ĂȘtre Ă©crit, une ValueError est levĂ©e.

Historique

Version Description
8.0.0 Antérieur à PHP 8.0.0, false était retourné en cas d'échec.
8.0.0 shmop attend une instance de Shmop désormais; auparavant une resource était attendue.

Exemples

Exemple #1 Écrit un bloc de mĂ©moire partagĂ©e

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

Cet exemple écrit les données de la chaßne $my_string dans un bloc de mémoire partagée. $shm_bytes_written représentera le nombre d'octets écrits.

Voir aussi

add a note

User Contributed Notes 2 notes

up
0
mark at manngo dot net ¶
3 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 ¶
5 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>';