#37578 [Bgs]: unserialize_callback_func in htaccess has no effect
| From: | tacker@php.net | Date: | Wed, 24 May 2006 14:04:25 +0000 |
| Subject: | #37578 [Bgs]: unserialize_callback_func in htaccess has no effect | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-97510@lists.php.net to get a copy of this message | ||
ID: 37578
User updated by: tacker@php.net
Reported By: tacker@php.net
Status: Bogus
Bug Type: Class/Object related
Operating System: Gentoo Linux
PHP Version: 5.1.4
New Comment:
Ok. But I don't understand why it shouldn't work in the future.
Why are objects in the session unserialized before the script has been
parsed?
If I set unserialize_callback_func to a value in a htaccess then PHP
knows about it and should call it.
Previous Comments:
------------------------------------------------------------------------
[2006-05-24 13:43:01] mike@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
As you use session.auto_start and no script has been executed when the
session starts PHP knows nothing about that callback.
------------------------------------------------------------------------
[2006-05-24 13:32:45] tacker@php.net
Description:
------------
Using unserialize_callback_func in a htaccess has no effect. The
required classes do not get loaded.
Reproduce code:
---------------
** .htacces
php_value unserialize_callback_func "myCallBack"
php_flag session.auto_start On
** index.php
<?php
function __autoload($class)
{
require_once './' . $class . '.php';
}
function myCallBack($class)
{
__autoload($class);
}
if (isset($_GET['kill'])) {
session_destroy();
session_start();
}
echo '<pre>';
echo 'unserialize_callback_func: ' .
ini_get('unserialize_callback_func') . "\n";
echo '$_SESSION: ' . "\n";
print_r($_SESSION);
if (!isset($_SESSION['test'])) {
$_SESSION['test'] = new MyClass;
echo 'Created a ' . get_class($_SESSION['test']) . "\n";
echo '$_SESSION: ' . "\n";
print_r($_SESSION);
}
echo '<p><a href="?kill=true">Kill session</a></p>';
echo '<p><a href="' . $_SERVER['PHP_SELF'] .
'">Reload</a></p>';
echo '</pre>';
?>
** MyClass.php
<?php
class MyClass
{
public $test = 'TestValue';
}
?>
Expected result:
----------------
During unserialization myCallBack should be called and a complete
MyClass object should exist.
$_SESSION = Array
(
[test] => MyClass Object
(
[test] => TestValue
)
)
Actual result:
--------------
$_SESSION = Array
(
[test] => __PHP_Incomplete_Class Object
(
[__PHP_Incomplete_Class_Name] => MyClass
[test] => TestValue
)
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37578&edit=1