Shmop,是一個便於使用的功能集,允許PHP讀,寫,建立和刪除UNIX共用記憶體段。本文主要和大家分享shmop系列函數使用php共用記憶體實現方法,希望能協助到大家。
1、shmop 系列函數使用<?php//使用shmop 系列函數set_time_limit(0);$shm_key = ftok(__FILE__, 't');$shm_id = shmop_open($shm_key, "c", 0655, 1024);$size = shmop_write($shm_id, "Hello world".PHP_EOL, 0);shmop_write($shm_id, 'I love you'.PHP_EOL, $size+1);echo $size.PHP_EOL;$data = shmop_read($shm_id, 0, 100);var_dump($data);shmop_delete($shm_id);shmop_close($shm_id);//Shared Memory Functions/** * shmop_open(int $key , string $flags , int $mode , int $size) * $key 共用記憶體的key * $flags 的值有以下幾種 * a : 建立一個唯讀共用記憶體區。 * c : 如果共用記憶體區已存在,則開啟該共用記憶體區,並嘗試讀寫。否則建立共用記憶體區 * w : 建立一個讀寫共用記憶體區 * n : 建立一個共用記憶體區,如果已存在,則返回失敗 * * $mode 讀寫權限。如0755 0644 等 * $size 申請共用記憶體區的大小 *//** * shmop_read( resource $shmid , int $start , int $count) * 將從共用記憶體塊中讀取資料 * $shmid 共用記憶體id,資源類型 * $start 從共用記憶體的那個位元組開始讀起 * $count 一次讀取多少個位元組。 * 如果count值小於發送的資訊長度,則資訊會被截斷。 *//** * shmop_write(resource $shmid , string $data , int $offset) * 將資料寫入共用記憶體塊 * $data 將要寫入的資料 * $offset 從共用記憶體塊的那個位置開始寫入。 * 該函數的傳回值是寫入資料的長度。 *//** * shmop_size(resource $shmid); * 返回當前共用記憶體塊,已經使用的大小 *//** * shmop_delete ( resource $shmid ) * 刪除一個共用記憶體塊的,刪除參考關聯性 *//** * shmop_close ( resource $shmid ) * 關閉共用記憶體塊 * 要先使用shmop_delete 之後才能繼續使用shmop_close */2、shm 系列函數使用<?php//使用訊號量擴充共用記憶體$key = ftok(__FILE__, 'a');$share_key = 1;//建立一個共用記憶體,大小為1024位元組,許可權為755$shm_id = shm_attach($key, 1024, 0755);//將一個key=>value放進共用記憶體$message1 = "I love Roverliang";shm_put_var($shm_id, $share_key, $message1);//重複使用key ,前一個設定的值會被後一個設定的值覆蓋掉。$message2 = "I love Rover";shm_put_var($shm_id, $share_key, $message2);//讀取一個共用記憶體值$read_message = shm_get_var($shm_id, $share_key);echo $read_message.PHP_EOL;//並不是取走了,而是讀取$read_message2 = shm_get_var($shm_id, $share_key);echo $read_message2.PHP_EOL;//判斷共用記憶體中,某個值是否存在$isexists = shm_has_var($shm_id, $share_key);var_dump($isexists);//刪除一個值shm_remove_var($shm_id, $share_key);//判斷共用記憶體中,某個值是否存在$isexists = shm_has_var($shm_id, $share_key);var_dump($isexists);//刪除一個共用記憶體shm_remove($shm_id);//關閉共用記憶體的串連shm_detach($shm_id);