CakeFest 2024: The Official CakePHP Conference

shmop_write

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

shmop_writeSchreibt Daten in einen gemeinsamen Speicherbereich

Beschreibung

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

shmop_write() schreibt Daten in einen gemeinsamen Speicherbereich.

Parameter-Liste

shmop

Der Bezeichner für den gemeinsamen Speicherbereich, der von shmop_open() erzeugt wurde.

data

Ein String, der in den gemeinsamen Speicherbereich geschrieben werden soll.

offset

Gibt an, von welcher Position ab Daten in den gemeinsamen Speicherbereich geschrieben werden sollen. Der Offset muss größer oder gleich Null und kleiner oder gleich der tatsächlichen Größe des gemeinsamen Speicherbereichs sein.

Rückgabewerte

Die Länge der geschriebenen Daten data oder false, falls ein Fehler auftrat.

Fehler/Exceptions

Wenn offset außerhalb des zulässigen Bereichs liegt oder in einen schreibgeschützten gemeinsamen Speicherbereich geschrieben werden soll, wird ein ValueError ausgelöst.

Changelog

Version Beschreibung
8.0.0 Vor PHP 8.0.0 wurde bei einem Fehler false zurückgegeben.
8.0.0 shmop erwartet nun eine Shmop-Instanz; vorher wurde eine resource erwartet.

Beispiele

Beispiel #1 In den gemeinsamen Speicherbereich schreiben

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

In diesem Beispiel werden die Daten der Variablen $my_string in den gemeinsamen Speicherbereich geschrieben. Die Variable $shm_bytes_written enthält die Anzahl der geschriebenen Bytes.

Siehe auch

  • shmop_read() - Liest Daten aus einem gemeinsamen Speicherbereich

add a note

User Contributed Notes 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
3 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