2014-06-20 17 views
0

我在这里很新,我需要帮助。 你知道如何使用shmop_write php写超过1个字符串到共享内存吗?如何使用shmop_write php将多个字符串写入共享内存?

这是我的PHP语法:

$key = 864; 
$mode = 'c'; 
$permission = 0644; 
$size = 1024; 

$shmid = shmop_open($key, $mode, $permission, $size); 

$string = "This is String 1"; 
$string2 = "String 2"; 

shmop_write($shmid, $string, 0);  
shmop_write($shmid, $string2, 0); 

$size = shmop_size($shmid); 
echo shmop_read($shmid, 0, $size); 

shmop_delete($shmid); 
shmop_close($shmid); 

预期结果(通缉的结果):这是字符串1String 2

,但结果是语法的是:字符串2String 1

如果我改变$string = "String 1" from $string = "This is String 1", 结果仍然如下:String 2String 1(像不能刷新内存块)

你能告诉我如何得到想要的结果吗?谢谢。

+0

'shmop_write($ shmid,$ string。$ string2,0);'? –

+0

以不同的偏移量写入它们。 – Barmar

回答

0

共享内存不是流,它只是一块内存。 shmop_read()的第三个参数指定在内存块中写入的位置。如果您写入相同的偏移量,它会覆盖之前的内容。如果你想写一个又一个的事情,你需要指定不同的偏移:

shmop_write($shmid, $string, 0); 
shmop_write($shmid, $string2, strlen($string)); 

如果你想写很多东西到共享内存中,更新变量来跟踪当前位置:

$offset = 0; 
shmop_write($shmid, $string, $offset); 
$offset += strlen($string); 
shmop_write($shmid, $string2, $offset); 
$offset += strlen($string2); 
shmop_write($shmid, $string3, $offset); 
$offset += strlen($string3); 
shmop_write($shmid, $string4, $offset); 
$offset += strlen($string4); 

一个好主意是使用一个类来实现,其中$offset是一个类属性。

+0

Thx Barmar,这是我搜索的答案。哦,是的,我想再问你一次。你知道如何清除共享内存中的数据吗? 让的说 $字符串= “字符串1”, $字符串2 = “字符串2”, $ STRING3 = “字符串3”, 后,我从你的答案一样, 结果是=“字符串1String 2String 3 “; 但是,如果我改变$ string =“Str”, 结果=“StrString 2String 3ing 3” - 但是,最后一个结果中的“ing 3”来自之前的实验,那么如何擦除它呢? Thx .. –

+0

既然你必须跟踪你写了多少,你应该使用它作为'shm_read()'的长度参数。 – Barmar