Bug #53835 [Opn->Tbd]: shm_put_var and SplStack
| From: | johannes@php.net | Date: | Tue, 25 Jan 2011 19:47:47 +0000 |
| Subject: | Bug #53835 [Opn->Tbd]: shm_put_var and SplStack | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-158175@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53835&edit=1
ID: 53835
Updated by: johannes@php.net
Reported by: minisotm at gmail dot com
Summary: shm_put_var and SplStack
-Status: Open
+Status: To be documented
Type: Bug
Package: Semaphore related
Operating System: *nix
PHP Version: 5.3.5
Block user comment: N
Private report: N
New Comment:
The issue here is that the data is serialized. The docs on
shm_put_var()currently state
All variable-types except resources are supported.
Which is not correct as serialisation of objects from interal classes
(PDO, DOM, SPL, ...) is often not possible for various reasons
(representing C structures etc.)
Previous Comments:
------------------------------------------------------------------------
[2011-01-25 09:52:31] minisotm at gmail dot com
HACK:
<?php
class HackStack extends \SplStack
{
private $_data;
public function __sleep()
{
$this->_data = array();
$this->rewind();
while ($this->valid()) {
$this->_data[] = $this->current();
$this->next();
}
return array('_data');
}
public function __wakeup()
{
foreach ($this->_data as $row) {
$this->push($row);
}
$this->_data = array ();
}
}
$SHM_KEY = ftok(__FILE__, chr( 4 ) );
$data = shm_attach($SHM_KEY, 102400, 0666);
$testData = array("hello","world","1","2","3");
$test = new HackStack();
$test->push($testData);
$test->push($testData);
echo "one: \n";
print_r($test);
shm_put_var($data, 1, $test);
echo "two: \n";
print_r(shm_get_var($data, 1));
shm_detach($data);
?>
RESULT:
one:
HackStack Object
(
[_data:HackStack:private] =>
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
[1] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
)
)
two:
HackStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
[1] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
)
)
------------------------------------------------------------------------
[2011-01-25 08:43:05] minisotm at gmail dot com
An object SplDoublyLinkedList () the same situation.
------------------------------------------------------------------------
[2011-01-25 08:32:53] minisotm at gmail dot com
Description:
------------
When trying to write an object through the function shm_put_var SplStack
it is
empty when invoking a shm_get_var.
Test script:
---------------
<?php
$SHM_KEY = ftok(__FILE__, chr( 4 ) );
$data = shm_attach($SHM_KEY, 102400, 0666);
$testData = array("hello","world","1","2","3");
$test = new SplStack();
$test->push($testData);
print_r($test);
shm_put_var($data, 1, $test);
print_r(shm_get_var($data, 1));
shm_detach($data);
Expected result:
----------------
one:
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
)
)
two:
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
)
)
Actual result:
--------------
one:
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
[0] => Array
(
[0] => hello
[1] => world
[2] => 1
[3] => 2
[4] => 3
)
)
)
two:
SplStack Object
(
[flags:SplDoublyLinkedList:private] => 6
[dllist:SplDoublyLinkedList:private] => Array
(
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53835&edit=1