<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[PHP进程之间共享变量另一种办法：php 共享内存的使用。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 20 Jan 2011 16:05:03 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	php有两套使用共享内存的函数，一套是System V IPC函数的封装，另一套是shmop。这两个都无需安装外部库文件。前者只能在linux下使用，而且要使用它的话，在安装php的时候要加上 –enable-sysvshm选项；而后者在linux和windows（win2k之后的系统，win98不支持）都可以使用，但在windows的时候，只有在php是ISAPI运行模式才能正常工作，在安装php的时候要加上–enable-shmop。<br/>这两套函数的使用相当简单，下面分别给出简单的用法，更详细的信息可以参考php手册。<br/>一、System V的共享内存使用：<br/><div class="code">&lt;?php<br/>&nbsp;&nbsp;// 创建内存块<br/>&nbsp;&nbsp;$key = 12345; // 共享内存的key，注：类型为int<br/>&nbsp;&nbsp;$memsize = 100; // 共享内存的大小，单位byte<br/>&nbsp;&nbsp;$perm = 0666; // 共享内存访问权限，参考linux的权限<br/>&nbsp;&nbsp;$var_key = 345; // 共享内存的某变量的key，注：类型为int<br/>&nbsp;&nbsp;$shmid = shm_attach( $key, $memsize, $perm ); // 创建一个共享内存<br/>&nbsp;&nbsp;shm_put_var( $shmid, $var_key, &quot;abc&quot; ); // 插入一个共享内存变量，key为$var_key，值为&quot;abc&quot;<br/>&nbsp;&nbsp;shm_detach( $shmid ); // 关闭共享内存<br/> ?&gt;</div>运行上面的php程序可以创建一个key为12345的共享内存，大小为100字节，里面有个值为“abc”的变量。在linux命令行敲入ipcs可以看到创建的共享内存信息：<br/> —— Shared Memory Segments ——–<br/> key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shmid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;owner&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nattch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; status&nbsp;&nbsp;&nbsp;&nbsp; <br/> 0×00003039&nbsp;&nbsp;&nbsp;&nbsp; 262144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; daemon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 666&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/> 注：0×00003039就是12345的16进制形式。<br/> 访问新创建的共享内存并删除这个共享内存的PHP代码：<br/><div class="code">&lt;?php<br/>&nbsp;&nbsp;// 读取内存块内容<br/>&nbsp;&nbsp;$shmid = shm_attach( 12345 ); // 访问key为12345的共享内存<br/>&nbsp;&nbsp;echo shm_get_var( $shmid, 345 ); // 把共享内存中key为345的变量打印出来，这里将显示abc<br/>&nbsp;&nbsp;shm_remove( $shmid ); // 删除该共享内存<br/> ?&gt;</div>运行上面这个php代码，将显示abc，并把共享内存删除，这时候再运行ipcs就可以看到那块共享内存已经不存在了。<br/>二、shmop的共享内存使用：<br/><div class="code">&lt;?php<br/>&nbsp;&nbsp;// 创建内存块<br/>&nbsp;&nbsp;$key = 12345; // 共享内存的key<br/>&nbsp;&nbsp;$memsize = 100; // 共享内存的大小，单位byte<br/>&nbsp;&nbsp;$perm = 0666; // 共享内存访问权限，参考linux的权限<br/>&nbsp;&nbsp;$offset = 0; // 共享内存偏移地址，0表示共享内存的起始地址<br/>&nbsp;&nbsp;$shmid = shmop_open($key, &quot;c&quot;, $perm, $memsize); // 创建一个共享内存，第二个参数c表示创建<br/>&nbsp;&nbsp;$shm_bytes_written = shmop_write($shm_id, &quot;abc&quot;, 0); // 把&quot;abc&quot;写入共享内存<br/>&nbsp;&nbsp;echo $shm_bytes_written; // 打印出写入共享内存的数据长度，这里将显示3<br/>&nbsp;&nbsp;shmop_close($shm_id); // 关闭共享内存<br/> ?&gt;</div>运行这个php将创建一个key为12345，大小为100字节的共享内存，里面写入了”abc”这个字符串。我们在写一个访问这个共享内存的php：<br/><div class="code">&lt;?php<br/>&nbsp;&nbsp;// 读取内存块<br/>&nbsp;&nbsp;$shm_id = shmop_open(12345, &quot;w&quot;, 0, 0); // 打开key为12345的共享内存，第二个参数w表示以读写方式打开，打开已存在的共享内存，第三个和第四个参数必须是0<br/>&nbsp;&nbsp;$shm_data = shmop_read($shm_id, 0, 3); // 从共享内存里面读取3字节的数据，第二个参数是偏移地址，0表示共享内存的起始地址<br/>&nbsp;&nbsp;echo $shm_data; // 打印出上个函数返回的共享内存数据<br/>&nbsp;&nbsp;shmop_delete($shm_id); // 删除共享内存<br/> ?&gt;</div><br/>来源：http://code.haohailuo.com/article-78.html<br/><br/><br/>A．ipcs -m 查看共享内存<br/>B．ipcrm –M 0x20110302//清这个内存地址的缓存<br/>C．ipcrm -M 0x20110303//清这个内存地址的缓存<br/><br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP进程之间共享变量另一种办法：php 共享内存的使用。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>