shmop_write
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
shmop_write — 共有メモリブロックにデータを書き込む
パラメータ
shmop
-
shmop_open() で作られた共有メモリブロックの識別子。
data
-
共有メモリブロックに書き込む文字列
offset
-
共有メモリセグメント内部のどこから、データを書き始めるかを指定します。 この値は 0 以上、かつ共有メモリセグメントの実際のサイズ以下でなければいけません。
戻り値
書き込んだ data
のサイズを返します。
エラー / 例外
offset
が範囲外の値の場合、
または読み取り専用の共有メモリセグメントに書き込んだ場合、
ValueError がスローされます。
変更履歴
バージョン | 説明 |
---|---|
8.0.0 |
PHP 8.0.0 より前のバージョンでは、
失敗した時に false を返していました。
|
8.0.0 |
引数 shmop は、
Shmop クラスのインスタンスを期待するようになりました。
これより前のバージョンでは、リソースが期待されていました。
|
例
例1 共有メモリブロックに書き込む
<?php
$shm_bytes_written = shmop_write($shm_id, $my_string, 0);
?>
この例は、$my_string
にあるデータを共有メモリブロックに書き込みます。
$shm_bytes_written
には、書かれたデータのバイト数が入ります。
+add a note
User Contributed Notes 2 notes
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);
?>
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>';
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google