|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2003-03-25 14:50 UTC] wez@php.net
[2003-03-25 14:59 UTC] discussion at vodopivec dot com
[2003-03-25 15:17 UTC] iliaa@php.net
[2003-03-25 15:35 UTC] discussion at vodopivec dot com
[2003-03-25 15:56 UTC] iliaa@php.net
[2003-03-25 16:10 UTC] discussion at vodopivec dot com
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 16:00:01 2025 UTC |
My opinion is that shmop_read function has wrong behaviour, returning 'count' parameter as the length of the string, instead of real length of the string, up to the terminating zero. This should be easy to fix, in fact I already did, but someone should apply this patch - in shmop_read, instead of RETURN_STRINGL(return_string, bytes, 0); you can use RETURN_STRINGL(return_string, strlen(return_string), 0); Below is the php code that demonstrates this problem. Thanks, Mario. <?php $buffer = "12345"; // Create 100 byte shared memory block with system id if 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, $buffer, 0); if($shm_bytes_written != strlen($buffer)) { echo "Couldn't write the entire length of data\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."<br>\n"; if ($my_string != $buffer) { print "This is where it doesn't make sense"."<br>\n"; print "buffer len = ".strlen($buffer)."<br>\n"; print "my string len = ".strlen($my_string)."<br>\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."; } else echo "Deleted shm block"; shmop_close($shm_id); ?>