Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не извлекается многомерный массив из COOKIE
 
 автор: antf   (30.05.2005 в 12:51)   письмо автору
 
 

Здравствуйте, помогите, пожалуйста, разобраться. В данной ситуации или я что-то не так делаю, или 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}"] существуют и имеют правильные значения. Вроде бы место ровное, подскользнуться негде.

   
 
 автор: cheops   (30.05.2005 в 12:54)   письмо автору
 
   для: antf   (30.05.2005 в 12:51)
 

А cookie создаётся, т.е. имеется ли файл в директории Cookies на вашей машине?

   
 
 автор: antf   (30.05.2005 в 13:40)   письмо автору
 
   для: cheops   (30.05.2005 в 12:54)
 

Самое интересное, что да, причем другая почти однотипная переменная COOKIE, содержащая одномерный ассоциативный массив, прекрасно извлекается.

   
 
 автор: antf   (30.05.2005 в 13:56)   письмо автору
 
   для: antf   (30.05.2005 в 13:40)
 

Первое измерение многомерного массива $md_array представляет из себя ассоциативный массив, состоящий из трех элементов. Все ключи - строковые переменные, два элемента содержат целые числа, один элемент - строку, которая может состоять только из английских букв, цифр и пробелов.
PS При тестировании на бесплатном хостинге это некритично, просто интересно разобраться что к чему.

   
 
 автор: antf   (15.06.2005 в 06:45)   письмо автору
 
   для: 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); ?>


Это как, я понимаю, магические кавычки мне тут все дело портят :( :) ...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования