php shmop_open
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <?php $arr=array(); function application($key,$value="") { global $arr; if($value=="") { $shm_id = @shmop_open(12345, "a", 0644,100); }else{ @$shm_id = shmop_open(12345, "c",0,0); if(!$shm_id) { $shm_id=shmop_open(12345,"c",0644,100); } } @$byte=shmop_read($shm_id,0,1024*1024); if(!$byte){ return ""; }else{ if($byte!=""){ $arr=unserialize($byte); }else{ return ""; } } if($value=="")//取值 { shmop_close($shm_id); if(array_key_exists($key,$arr)) { return $arr[$key]; } return ""; }else{ $arr[$key]=$value; shmop_write($shm_id,serialize($arr),0); shmop_close($shm_id); } } ?>
$p = 新しい共有; //$p->a = 'abcd'; //$p->b = 1234; print_r($p->_all); エコー $p->b; クラス共有 { プライベート $shm_id; プライベート $shm_key = 0xff3; プライベート $shm_size = 1024; 関数 __construct() { $this->shm_id = shmop_open($this->shm_key, "c", 0644, $this->shm_size) または die('アプリケーションが失敗しました'); } 関数 __get($name) { $buf = shmop_read($this->shm_id, 0, $this->shm_size); $buf = unserialize(trim($buf)); if($name == '_all') $buf を返します。 isset($buf[$name]) を返します。 $buf[$name] : false; } 関数 __set($name, $value) { $buf = shmop_read($this->shm_id, 0, $this->shm_size); $buf = unserialize(trim($buf)); $buf[$name] = $value; $buf = シリアル化($buf); if(strlen($buf) >= $this->shm_size) die('スペース不足'); shmop_write($this->shm_id, $buf, 0) または die('書き込み失敗'); } } <br><font color="#e78608">------解決策------------------</font><br>前回の投稿と同様、ディスカッションは <br>Linux には php_shmop.dll 拡張子に基づく別の方法がありますが、原理は同じです<br>php_shmop は Linux でもコンパイルできますが、ウィンドウ用に設計されています<br> <br><br>------解決策---------<font color="#e78608"></font>あなたの悩みをわかりやすくお伝えします<br><br> 共有メモリ領域はロックする必要があります。PHP はプロセスによって共有されるミューテックスを設定できません。<br><div class="clear"> を使用してロックを行うこともできます。</div>