3

共有メモリを使用して、Windows で php スクリプトと c プログラムの間で通信できますか?

c プログラムは常に実行され、メモリ マップされたファイルを使用します。

handle1 = CreateFileMapping(
 (HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, sizeof(byte)*BUFFER_SIZE, "my_foo" );

hView = (LPINT) MapViewOfFile(handle1, FILE_MAP_ALL_ACCESS, 0, 0, 0);

PHP スクリプトの場合、以下のコードを使用して、c プログラムによって作成されたメモリ マップ ファイルを開くことができますか?

$shmkey = @shmop_open(ftok("my_foo", 'R'), "a", 0644, $buffer_size);

または、CメモリマップファイルとPHP共有メモリは別のものですか?

4

2 に答える 2

3

PHP shmop関数は、基盤となるPOSIX関数の単なるラッパーであり、Windowsでは使用できないようです。

PHPマニュアルから:

注:Windows 2000より前のバージョンのWindowsは、共有メモリをサポートしていません。Windowsでは、Shmopは、PHPがApacheやIISなどのWebサーバーモジュールとして実行されている場合にのみ機能します(CLIおよびCGIは機能しません)。

どうやらPHPはapache内でこの動作をエミュレートしますが、スタンドアロンバイナリでは利用できないため、同等のWindowsとはほとんど統合されません。

于 2009-03-25T09:09:31.737 に答える
0

私は、Windows アプリケーションによって作成および書き込まれた共有メモリに PHP がアクセスできるようにしたいと考えていました。これは、独自の php 拡張 (php_gsect.dll と呼ばれる) を作成することで実現しました。これはあなたが望むものではないかもしれませんが、私の php_gsect はグローバル セクションに接続され、操作できるバイト数を読み取り (または書き込み) ます。

参考までに: 私の Windows アプリケーションは、別のシステムから動的トレンド データを取得し、そのデータを名前付きのグローバル セクションに入れています。PHP Web ページはグローバル セクションのデータにアクセスし、グラフを作成します (ESJ グラフ ライブラリを使用)。

于 2009-11-16T21:01:05.230 に答える