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 :)