Consider that very simple code, that runs on PHP 5.2.5 onto a Windows
machine :
<?php
class a
{
    public $b;

    public function __sleep()
    {
        file_put_contents("log.txt","ok" . PHP_EOL,FILE_APPEND);
        echo "done!";
        return array();
    }
}

$a = new a;
serialize($a);
?>

No problem here, log.txt is writtable, when it passes on the serialize()
instruction, it goes to __sleep and works well.
"OK\r\n" is appended to the log file , and "done!" is displayed.



Now consider this :

<?php
session_start();
class a
{
    public $b;

    public function __sleep()
    {
        file_put_contents("log.txt","ok" . PHP_EOL,FILE_APPEND);
        echo "done!";
        return array();
    }
}

$a = new a;
$_SESSION['obj'] = $a;
?>

In this case, when the object is going in the session, it naturally passes
throught __sleep().
The problem is that file_put_contents() doesn't work -> the file is not
appended "OK\r\n" as it should be.
"done!" is displayed , and if you look at the return value of
file_put_contents ( number of bytes that have been written ) : it's all
right ! It simply doesn not write to the file.

Anyone has an idea ?
Is this a bug ?
Thx :)

Reply via email to