|
|
|
| Здравствуйте, помогите, пожалуйста, разобраться. В данной ситуации или я что-то не так делаю, или PHP на хостинге неправильный. Задача такая: нужно вытащить из $_COOKIE двумерный массив $md_array. Если я тестирую на локальной машине (localhost), все идет как по маслу, но на хостинге (бесплатный) нижеприведенная конструкция отказывается работать.
<?
$id_user = $_SESSION['id_user'];
$md_array = unserialize($_COOKIE["md_array{$id_user}"]);
?>
|
Переменные $id_user и $_COOKIE["md_array{$id_user}"] существуют и имеют правильные значения. Вроде бы место ровное, подскользнуться негде. | |
|
|
|
|
|
|
|
для: antf
(30.05.2005 в 12:51)
| | А cookie создаётся, т.е. имеется ли файл в директории Cookies на вашей машине? | |
|
|
|
|
|
|
|
для: cheops
(30.05.2005 в 12:54)
| | Самое интересное, что да, причем другая почти однотипная переменная COOKIE, содержащая одномерный ассоциативный массив, прекрасно извлекается. | |
|
|
|
|
|
|
|
для: antf
(30.05.2005 в 13:40)
| | Первое измерение многомерного массива $md_array представляет из себя ассоциативный массив, состоящий из трех элементов. Все ключи - строковые переменные, два элемента содержат целые числа, один элемент - строку, которая может состоять только из английских букв, цифр и пробелов.
PS При тестировании на бесплатном хостинге это некритично, просто интересно разобраться что к чему. | |
|
|
|
|
|
|
|
для: antf
(30.05.2005 в 13:56)
| | Я понял в чем дело. Допустим, многомерный массив $md_array состоит из одного элемента и имеет такую структуру:
array(1) { [12261]=> array(2) { ["count"]=> string(2) "34" ["db"]=> int(2) } }
|
Известно, что на localhost применение unserialize проблем не порождало, и массив извлекался без проблем, в то время как на хостинге функция unserialize возвращала пустую строку. Я решил сравнить два сериализованных массива, содержащих один и тот же элемент, при этом один массив сериализовывался на localhost, а другой на хостинге. Подобное сравнение и выявило причину бага:
Сериализованный массив:
localhost:
a:1:{i:12261;a:2:{s:5:"count";i:1;s:2:"db";i:2;}}
|
хостинг:
a:1:{i:1032;a:2:{s:5:\"count\";i:1;s:2:\"db\";i:2;}}
|
Обратите внимание на экранирующие слэши перед кавычками, которые как раз и мешали правильной работе функции unserialize(). Проблема решается так:
<?$md_arr_ser = str_replace('\"', '"', $md_arr_ser); ?>
|
Это как, я понимаю, магические кавычки мне тут все дело портят :( :) ... | |
|
|
|