#50126 [Com]: Shared Memory functions work on CLI-win32

From: Date: Wed, 11 Nov 2009 19:45:10 +0000
Subject: #50126 [Com]: Shared Memory functions work on CLI-win32
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-3093@lists.php.net to get a copy of this message
ID: 50126 Comment by: Hendrik dot Mundt at googlemail dot com Reported By: Hendrik dot Mundt at googlemail dot com Status: Open Bug Type: Documentation problem Operating System: Windows XP PHP Version: 5.2.11 New Comment: > Who exactly are you sharing with when using CLI? I am sharing the memory with another php script that is also started by the PHP CLI binary. Below is another example, based on the example from the manual. Put both files in the same directory and start the first script. The second script will be called by the first one. I tested this on Windows XP Media Center Edition with most recent OS updates. No web server software is running. Tested PHP versions: 5.2.9-1, 5.2.11, 5.2.11-nts. The two scripts below can be started by different versions ... it still works. The manual says it does not work with CLI. Is it safe to use the shmop functions on win32 CLI? If it is safe then it would be nice to reflect this in the manual. test.shmop.php : <?php // Create 100 byte shared memory block with system id of 0xff3 $shm_id = shmop_open(0xff3, "c", 0644, 100); if (!$shm_id) { echo "Couldn't create shared memory segment\n"; } // Get shared memory block's size $shm_size = shmop_size($shm_id); echo "SHM Block Size: " . $shm_size . " has been created.\n"; // Lets write a test string into shared memory $shm_bytes_written = shmop_write($shm_id, "my shared memory block", 0); if ($shm_bytes_written != strlen("my shared memory block")) { echo "Couldn't write the entire length of data\n"; } echo "Starting second script ...\n"; $output = php test2.shmop.php; echo $output; echo "Second script ended.\n"; // Now lets read the string back $my_string = shmop_read($shm_id, 0, $shm_size); if (!$my_string) { echo "Couldn't read from shared memory block\n"; } echo "The data inside shared memory was: " . $my_string . "\n"; //Now lets delete the block and close the shared memory segment if (!shmop_delete($shm_id)) { echo "Couldn't mark shared memory block for deletion."; } shmop_close($shm_id); ?> test2.shmop.php : <?php // Create 100 byte shared memory block with system id of 0xff3 $shm_id = shmop_open(0xff3, "c", 0644, 100); if (!$shm_id) { echo "Couldn't create shared memory segment\n"; } // Get shared memory block's size $shm_size = shmop_size($shm_id); echo "SHM Block Size: " . $shm_size . " has been created.\n"; // Now lets read the string back $my_string = shmop_read($shm_id, 0, $shm_size); if (!$my_string) { echo "Couldn't read from shared memory block\n"; } echo "The data inside shared memory was: " . $my_string . "\n"; shmop_close($shm_id); ?> Previous Comments: ------------------------------------------------------------------------ [2009-11-09 22:12:48] rquadling@php.net Who exactly are you sharing with when using CLI? ------------------------------------------------------------------------ [2009-11-09 15:15:58] Hendrik dot Mundt at googlemail dot com Description: ------------ Hi, the manual says (http://www.php.net/manual/en/intro.shmop.php): "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)." This is false, enabling the supplied php_shmop.dll these functions work in CLI version of php 5.2.9-1 & 5.2.11 on Windows XP. Proof: example from http://www.php.net/manual/en/shmop.examples-basic.php I didn't check any other versions than the above mentioned. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=50126&edit=1

« previous php.doc.bugs (#3093) next »