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 作为 Web 服务器模块运行时才能工作,例如 Apache 或 IIS(CLI 和 CGI​​ 将不起作用)。

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

于 2009-03-25T09:09:31.737 回答
0

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

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

于 2009-11-16T21:01:05.230 回答