|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-11-09 15:15 UTC] 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. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2026 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 08 07:00:01 2026 UTC |
> 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); ?>