你可以使用共享内存在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共享内存不同的东西?
答案 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图表库)。