views:

628

answers:

2

Can you use shared memory to communicate between php scripts and c program in windows?

The c program runs all the time and uses memory mapped files ie:

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);

For the PHP scripts can I just use the below code to open the memory mapped file created by the c program?

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

or are c memory mapped files and php shared memory different things?

+3  A: 

The PHP shmop functions are just wrappers for the underlying POSIX functions, which doesn't seem to be available under windows.

From the PHP manual:

Note: Versions of Windows previous to Windows 2000 do not support shared memory. Under Windows, Shmop will only work when PHP is running as a web server module, such as Apache or IIS (CLI and CGI will not work).

Appearently PHP emulates this behaviour within apache, but since it isn't available in the stand alone binaries it will hardly integrate with the windows equivalents.

Emil H
A: 

I wanted to allow PHP to access shared memory that was created and written to by a Windows application. I achieved this by creating my own php extension (called php_gsect.dll). This may not be what you want but my php_gsect attaches to the global section and reads (or writes) a number of bytes which I can then manipulate.

FYI: My windows application is retreiving dynamic trend data from another system and putting the data into a named global section. The php web page is accessing the data from the global section and creating a chart (using the ESJ chart library).

robert oldroyd