Edit report at http://bugs.php.net/bug.php?id=53835&edit=1

 ID:                 53835
 Updated by:         [email protected]
 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

Reply via email to