2009-03-25 22 views
3

共有メモリを使用して、WindowsのPHPスクリプトとCプログラム間で通信できますか?私はCプログラムによって作成されたメモリマップドファイルを開くには、以下のコードを使用することができますPHPスクリプトのために共有メモリをPHPと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); 

Cプログラムでは、ファイルは、IEマッピングされているすべての時間を実行し、メモリを使用していますか?

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

またはCのメモリマップされたファイルとPHPの共有メモリの異なるものはありますか?

答えて

3

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

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

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

0

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

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

関連する問題