ホームページ  >  記事  >  バックエンド開発  >  PHP共有メモリの使用

PHP共有メモリの使用

巴扎黑
巴扎黑オリジナル
2016-12-01 10:01:571883ブラウズ

php には共有メモリを使用する 2 つの関数セットがあり、1 つは System V IPC 関数のパッケージで、もう 1 つは shmop です。どちらも外部ライブラリをインストールする必要はありません。前者は Linux でのみ使用でき、使用したい場合は、PHP をインストールするときに –enable-sysvshm オプションを追加する必要があります。一方、後者は Linux と Windows の両方で使用できます (win2k 以降のシステム、win98 はサポートしません)。 ) ただし、Windows では、php をインストールするときに、-enable-shmop を追加する必要があります。

これら 2 つの関数セットの使用方法は非常に簡単です。詳細については、PHP マニュアルを参照してください。

1. System V 共有メモリの使用量:
// メモリ ブロックを作成します
$key = 12345; // 共有メモリ キー、注: 型は int です
$memsize = 100;単位バイト
$perm = 0666; // 共有メモリのアクセス許可、Linux の許可を参照
$var_key = 345 // 共有メモリ内の変数のキー、注: 型は int
$shmid = shm_attach( $ key, $ memsize, $perm ); // 共有メモリを作成します
shm_put_var( $shmid, $var_key, "abc" ) // キー $var_key と値 "abc" を持つ共有メモリ変数を挿入します
shm_detach( $shmid ); / 共有メモリをオフにする
?>
上記の PHP プログラムを実行すると、キーが 12345、サイズが 100 バイト、値が「abc」の変数を持つ共有メモリを作成できます。 Linux コマンド ラインで「ipcs」と入力すると、作成された共有メモリ情報が表示されます:
—— Shared Memory Segments ——–
key 144 デーモン 666 100 0
注: 0×00003039 は 16 進数形式の 12345 です。

新しく作成した共有メモリにアクセスし、この共有メモリの PHP コードを削除します:
// メモリ ブロックの内容を読み取ります
$shmid = shm_attach( 12345 ) // キー 12345 で共有メモリにアクセスします
; echo shm_get_var( $shmid, 345 ); // 共有メモリのキー 345 の変数を出力します。ここに abc が表示されます
shm_remove( $shmid ); // 共有メモリを削除します
?>コードを実行すると、ABC が表示され、共有メモリが削除されます。このとき、再度 ipcs を実行すると、共有メモリが存在しないことがわかります。

2. shmop の共有メモリ使用量:
// メモリ ブロックを作成
$key = 12345; // 共有メモリ キー
$memsize = 100; // 共有メモリ サイズ、単位バイト
$ perm = 0666; // 共有メモリのアクセス権限、Linux の権限を参照
$offset = 0; // 共有メモリのオフセット アドレス、0 は共有メモリの開始アドレスを表します
$shmid = shmop_open($key, "c", $perm, $memsize); // 共有メモリを作成します。2 番目のパラメータ c は作成を意味します
$shm_bytes_write ($shm_id, "abc", 0) // 共有メモリに "abc" を書き込みます
echo $ shm_bytes_write;共有メモリに書き込まれたデータの長さを出力します。ここに 3 が表示されます
shmop_close($shm_id) // 共有メモリを閉じます
?> この PHP を実行すると、キーが 12345 のキーが作成されます。 100 バイトの共有メモリには文字列「abc」が書き込まれています。この共有メモリにアクセスする php を作成しています:
// メモリ ブロックを読み取ります
$shm_id = shmop_open(12345, "w", 0, 0) // キー 12345 で共有メモリを開きます。 2 番目のパラメータ w は、読み取り/書き込みモードで開き、既存の共有メモリを開くことを意味します
$shm_data = shmop_read($shm_id, 0, 3); // 共有メモリから 3 バイトを読み取ります。データの 2 番目のパラメータはオフセット アドレスで、0 は共有メモリの開始アドレスを表します
echo $shm_data; // 前の関数によって返された共有メモリ データを出力します
shmop_delete($shm_id);
?>
このPHPを実行するとabcが出力され、元の共有メモリが削除されます。

概要:
1. どちらの関数セットもシンプルで使いやすいです。shmop の唯一の利点は、Windows で使用できることです。Linux では、shm_* 関数セットを使用することをお勧めします。共有メモリの挿入、更新、読み取りには変数は非常に便利ですが、shmop は共有メモリのストレージ構造を独自に計画する必要があり、適用するのが少し複雑です。さらに、上記の例では、共有メモリのキーとして数値 12345 を直接使用しました。実際には、より標準的な方法は、ftok 関数を使用してパスを ipc キーに変換することです。具体的な方法についてはPHPのマニュアルを参照してください。
2. shmop を使用する場合、使用完了後に shmop_delete() 操作が実行されない場合、前回の書き込みの長さがその長さよりも大きい場合、次回共有メモリ変数の値を書き込むときに問題が発生します。次に書き込みます。その後、前の内容のみが上書きされ、冗長なコンテンツは保持されます。逆に、前回の書き込みの長さが次の書き込みの長さより短い場合は、超過したコンテンツが自動的に末尾に追加されます。
3. メモリ共有時に必要なキーと変数は全てint型です。

========================================
関連メソッドの紹介:
shm_attach
共有メモリ空間を開きます。
構文: int shm_attach(int key, int [memsize], int [perm]);
戻り値: 整数
関数の種類: オペレーティング システムおよび環境
内容の説明: この関数は、共有メモリ空間を開くまたは作成するために使用されます。パラメータキーはこの部分のキーです。パラメータ memsize は省略可能で、必要な最小メモリ容量を表します (単位はバイトグループ)。デフォルト値は php3.ini または php.ini の sysvshm.init_mem で設定されます。設定がない場合は 10000 バイトです。このメモリ空間の使用権を決定するためにパラメータ perm を省略することもできます。デフォルト値は 666 です。戻り値はプログラムが使用できる共有メモリのID値です。

shm_detach
共有メモリ空間のリンクを中止します。
構文: int shm_detach(int shm_identifier);
戻り値: 整数
関数の種類: オペレーティング システムおよび環境
内容の説明: この関数は、共有メモリ空間とのリンクを終了するために使用されます。パラメータ shm_identifier は、停止する部分の共有メモリ ID 値です。

shm_remove
メモリ領域をクリアします。
構文: int shm_remove(int shm_identifier);
戻り値: 整数
関数の種類: オペレーティング システムおよび環境
内容の説明: この関数は、共有メモリ空間内のすべてのデータをクリアするために使用されます。パラメータ shm_identifier は、停止する部分の共有メモリ ID 値です。

shm_put_var
メモリ空間に変数を追加または更新します。
構文: int shm_put_var(int shm_identifier, int variable_key,mixed variable);
戻り値: 整数
関数の種類: オペレーティング システムおよび環境
内容の説明: この関数は、メモリ空間内の変数値を追加または変更するために使用できます。 。パラメータ shm_identifier は、追加および変更する共有メモリ ID 値です。パラメータ variable_key は、追加および変更する変数名のキーです。パラメーター変数は変数の内容であり、変数の型は double、整数、文字列、または配列です。

shm_get_var
メモリ空間で指定された変数を取得します。
構文:mixed shm_get_var(int shm_identifier, int variable_key);
戻り値:混合型データ
関数の種類:オペレーティング システムおよび環境
内容の説明:この関数は、メモリ空間内の指定された変数値を取得するために使用できます。パラメータ shm_identifier は、取得する共有メモリ ID の値です。パラメータvariable_keyは、取得する変数名のキーです。戻り値は、指定された変数キーの値です。

shm_remove_var
メモリ空間内の指定された変数を削除します。
構文: int shm_remove_var(int id, int variable_key);
戻り値: 整数
関数の種類: オペレーティング システムおよび環境
内容の説明: この関数は、メモリ空間内の指定された変数値を削除するために使用できます。パラメータ shm_identifier は、削除する共有メモリ ID 値です。パラメータ variable_key は、削除する変数名のキーです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。