使用PHP和c共享内存?

时间:2009-03-25 09:04:39

标签: php c ipc shared-memory

你可以使用共享内存在php脚本和windows中的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共享内存不同的东西?

2 个答案:

答案 0 :(得分:3)

PHP shmop函数只是底层POSIX functions的包装器,它在Windows下似乎不可用。

来自PHP manual

  

注意:Windows 2000之前的Windows版本不支持   支持共享内存。在Windows下   Shmop只适用于PHP   作为Web服务器模块运行,例如   作为Apache或IIS(CLI和CGI不会   工作)。

显然PHP在apache中模拟了这种行为,但由于它在独立的二进制文件中不可用,因此很难与windows等价物集成。

答案 1 :(得分:0)

我想允许PHP访问由Windows应用程序创建和写入的共享内存。我通过创建自己的php扩展(称为php_gsect.dll)来实现这一目标。这可能不是你想要的,但我的php_gsect附加到全局部分并读取(或写入)一些字节然后我可以操作。

仅供参考:我的Windows应用程序正在从另一个系统中检索动态趋势数据,并将数据放入命名的全局部分。 php网页正在访问全局部分的数据并创建图表(使用ESJ图表库)。