shmop 系列函式使用 php共享記憶體

2021-08-15 23:06:59 字數 2553 閱讀 5323

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;

//判斷共享記憶體中,某個值是否存在

$i***ists = shm_has_var($shm_id, $share_key);

var_dump($i***ists);

//刪除乙個值

shm_remove_var($shm_id, $share_key);

//判斷共享記憶體中,某個值是否存在

$i***ists = shm_has_var($shm_id, $share_key);

var_dump($i***ists);

//刪除乙個共享記憶體

shm_remove($shm_id);

//關閉共享記憶體的連線

shm_detach($shm_id);

版權歸原作者

PHP共享記憶體的應用shmop系列

簡單的說明 可能很少情況會使用php來操控共享記憶體,一方面在記憶體的控制上,mc已經提供了一套很好的方式,另一方面,自己來操控記憶體的難度較大,記憶體的讀寫與轉存,包括後面可能會用到的儲存策略,要是沒有一定計算機組成原理的基礎,想做這些不是一件容易的事情。那為什麼還要使用它呢?如果我想進行管道通訊...

PHP共享記憶體的應用shmop系列

簡單的說明 可能很少情況會使用php來操控共享記憶體,一方面在記憶體的控制上,mc已經提供了一套很好的方式,另一方面,自己來操控記憶體的難度較大,記憶體的讀寫與轉存,包括後面可能會用到的儲存策略,要是沒有一定計算機組成原理的基礎,想做這些不是一件容易的事情。那為什麼還要使用它呢?如果我想進行管道通訊...

php 共享記憶體學習 shmop函式

問題 希望可以在程序間共享變數,為共享資料提供快速訪問 解決方案 除了可以使用apc模組,還可以用shmop或system v共享記憶體 1 建立鍵 2 將乙個可訪問的檔案路徑名轉換為乙個可供 shmop open 和其他系統vipc keys使用的整數,proj引數必須是乙個字串,這個引數其實就是...