PHP共有メモリの使用

Dec 01, 2016 am 10:01 AM
Linux php

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

See all articles