Как странно...(Про несоздающийся массив из unserialize)

prikoli23

Новичок
Столкнулся вот с чем: есть файл update.php, которому я посылаю сериализованную строку. Там
PHP:
$ser=$_GET['ser'];
$vv=unserialize($ser);
$file=fopen("1.txt", "a+");
fwrite($file,$ser."\t".$vv[0]);
В результате в файл $ser записывается, элемент массива нет. Как будто нет массива.
Если же я из браузера запускаю файл update.php, то всё записывается как надо. Подскажите в чём может быть проблема?
 

igorRovenki

Новичок
Если после
PHP:
$ser=$_GET['ser'];
добавить:
PHP:
echo '<pre>'; print_r($ser); echo '</pre>';
потом открыть, например, расширение FireBug для Firefix, еще раз отослать строку, что покажет FireBug?

p.s. я так понимаю отправляете строку ajax запросом?
 

prikoli23

Новичок
Да, посылаю я из другого окна, т.е. файл update.php вообще не выводит ничего на экран. Посылка вида
PHP:
xhttp.open('GET', 'update.php?text='+text+'&ser=<?php echo $ser; ?>'+'&active=<?php echo $active; ?>'+'&oborud=<?php echo $oborud; ?>'+'&category=<?php echo $category; ?>', true);
Сейчас обнаружил особенность, что ИНОГДА всё-таки элемент массива записывается. Когда - не удалось установить закономерность.
Вставил вашу строчку, если смотреть из браузера, то так и отображается, т.к. только из браузера можно воспользоваться FireBug-ом.
PHP:
a:6:{i:0;s:5:"стр6а";i:1;s:3:"T65";i:2;s:0:"";i:3;s:12:"500VA 380/24";i:4;s:5:"Trans";i:5;s:0:"";}
Когда я открываю в браузере файл, всё работает как надо.
Думаю вот что, у меня окно, которое посылает запрос закрывается без всяких таймаутов и подтверждений. Т.е. выплюнул строку и закрыл окно, может с этим как то связано?
 

igorRovenki

Новичок
можно еще попробовать сделать дебаг этого запроса и посмотреть точно ли там все правильно
'update.php?text='+text+'&ser=<?php echo $ser; ?>'+'&active=<?php echo $active; ?>'+'&oborud=<?php echo $oborud; ?>'+'&category=<?php echo $category; ?>
 

prikoli23

Новичок
можно еще попробовать сделать дебаг этого запроса и посмотреть точно ли там все правильно
'update.php?text='+text+'&ser=<?php echo $ser; ?>'+'&active=<?php echo $active; ?>'+'&oborud=<?php echo $oborud; ?>'+'&category=<?php echo $category; ?>
Правильно, ведь массив иногда создаётся, иногда пишется.
PHP:
var_dump(get_magic_quotes_gpc());
int(0)
Вобщем нашёл закономерность, например в строке
PHP:
a:6:{i:0;s:5:"стр6а";i:1;s:3:"T65";i:2;s:0:"";i:3;s:12:"500VA 380/24";i:4;s:5:"Trans";i:5;s:0:"";}
видно, что 0-й элемент массива написан на русском языке, если же этот элемент на английском, тогда скрипт записывает в файл. Если же на русском, то скрипт не записывает ни его, ни остальные элементы массива. Из браузера же всё записывается и на русском и на английском. Получается где-то браузер кодировку устанавливает?
 

prikoli23

Новичок
Разобрался! Дело всё в кодировке запроса. Когда JavaScript передаёт запрос, он в непонятной кодировке, соответственно при кириллице скрипт получает непонятно что и не может собрать массив. Дело у меня усугубилось ещё тем, что всё крутится на Денвере, а под Windows ещё дополнительные проблемы с кодировками. Когда же браузер запускает скрипт, он явно передаёт параметры GET-запроса в кодировке понятной скрипту. Решилось кодированием запроса UrlEncode() в AJAX запросе.
 
Сверху