вот код, который я пытаюсь выполнить, он отлично работал на моем localhost и другом сервере PHP версии 5.3.2-1ubuntu4.11, но это создает проблему в PHP версии 5.2.17 на общем хостинге
<?php /* PHP version PHP Version 5.2.17 * Server API CGI/FastCGI */ session_start(); $products = array(); if (!isset($_SESSION['products'])) { $products = array("somedata1", "somedata2", "somedata3"); $_SESSION['products'] = serialize($products); $_SESSION['test_products'] = serialize($products); echo "<br/>session products<br/>"; print_r(unserialize($_SESSION['products'])); echo "<br/>session test_products<br/>"; print_r(unserialize($_SESSION['test_products'])); } else { echo "<br/>session products<br/>"; print_r(unserialize($_SESSION['products'])); echo "<br/>session test_products<br/>"; print_r(unserialize($_SESSION['test_products'])); } ?>
На выходах первого запуска
session products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 ) session test_products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 )
но при перезагрузке
session products Warning: unserialize() expects parameter 1 to be string, array given in /home/uaustral/public_html/itoi/test.php on line 17 session test_products Array ( [0] => somedata1 [1] => somedata2 [2] => somedata3 )
Тот же код отлично работает на моей PHP-версии PHP версии 5.3.2-1ubuntu4.11
Я что-то упускаю (это автоматически исправляется в новой версии PHP) или это ошибка PHP для старой версии?
Если вы работаете с включенным register_globals
, любой элемент массива в $_SESSION
также известен как переменная с помощью этого ключа:
С register_globals
:
<?php session_start(); var_dump($products);
Должна показать вам несериализованную строку. Потому что вы позже скажете $products = array();
вы неявно изменяете $_SESSION['products']
. Решение: отключить register_globals
и на стороне примечание: вам не нужно сериализовать эти данные, сеанс может содержать многомерные массивы просто отлично. Просто убедитесь, что все необходимые определения классов загружены перед вызовом session_start
или имеют функцию автозагрузки.
Я думаю, что этот пост поможет вам:
http://www.phphelp.com/forum/index.php?topic=11483.0
«Сейчас он работает … Я сравнивал файлы php.ini с моей машиной и производственным сервером. Я отключил« Register Globals »в файле php.ini на рабочем сервере, и теперь тележка работает отлично! Благодаря"
Посмотрите, помогает ли это:
http://www.php.net/manual/en/function.unserialize.php#105588 .
функция session_decode даже говорит об этом.