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

 ID:                 52604
 Updated by:         m...@php.net
 Reported by:        zerspam at mail dot ru
 Summary:            Serialization of objects with __sleep() and fatal
                     error
-Status:             Re-Opened
+Status:             Open
 Type:               Bug
 Package:            Session related
 Operating System:   irrelevant
 PHP Version:        Irrelevant
 Block user comment: N



Previous Comments:
------------------------------------------------------------------------
[2010-10-13 08:10:45] m...@php.net

Tony, if your argument would be valid, there wouldn't be anything in the
serssion at all, sould it?

------------------------------------------------------------------------
[2010-10-12 14:44:22] zerspam at mail dot ru

Uhm, in any case: wherther it is a error or not - I expected php does
not broke my data. And I cannot get how your sample related to mine.



With my code you can see that php stores the data it should not store.
And it is a error.

------------------------------------------------------------------------
[2010-10-12 14:24:52] tony2...@php.net

>However if your class implements Serializable everything works as 

>expected when there is a fatal error.



Not true.

See this example:

---------

set_error_handler('my_error_handler');                                  
       

session_start();                                                        
       $a->b();                                                         
              class myclass implements Serializable                     
                                                                  

{                                                                       
           private $a= 1;                          

    private $b = 2;



  public function serialize()

{                                                                       
               var_dump("serialize");               

        return serialize(array('a'));

}                                                                       
           public function unserialize($data)                           
                                  {                                     
                                                
var_dump("unserialize");

        return unserialize($data);

}                                                                       
                                                

}                                                                       
       



function my_error_handler($code, $error, $file = NULL, $line = NULL)    
                                                    

{                                                                       
           throw new ErrorException($error, $code, 0, $file, $line);

}                                                                       
       

$obj = new myclass();                                   

$_SESSION['obj'] = $obj;

---------



Whether your class implements Serializable or not, serializers are
called on _request shutdown_ which never happens in case of fatal error,
because fatal error means BOOM!, exit.



And to be honest, I don't see anything wrong here.

Your script FAILED with a fatal error, did you expect PHP to ignore it
an go on running?

------------------------------------------------------------------------
[2010-09-14 04:43:08] isaiah dot derosewilson at kohanaphp dot com

I also have this same problem. I've tested both php 5.2.12 and 5.3.3 and
neither of them correctly serialize the object when there is a fatal
error - the whole object gets serialized when there is a fatal error
instead of just the properties in __sleep(). However if your class
implements Serializable everything works as expected when there is a
fatal error.

------------------------------------------------------------------------
[2010-09-05 13:32:43] zerspam at mail dot ru

Well, 3 weeks left and even no comments from dev team?

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=52604


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

Reply via email to