[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работает сериализация и десеарел. на сервере..
brdm
Формирую картинку в key.php
И из другого скрипта передаю туда предварительно сериализованные матрицы параметров $a = serialize (...) $b = serialize (...)
<img src=http://test.ru/php/key.php?a=$a&b=$b>

В скрипте который формирует картинку, матрицы десериализую
deserialize() и вставляю куда надо в картинку.

На локальном сервере Денвер(php4) все работает прекрасно.

НО на реальном сервере (php5) картинка работает без проблем, только без параметров. Получается, что они туда не передаются, или передаются, но не десериализовываются.

Посоветуйте пожалуйста чего нибудь.

Может есть какие-то нюансы применения стандартных функций serialize() и deserialize() ?



Спустя 13 минут, 15 секунд (19.02.2009 - 15:01) Viking написал(а):
опять глобалки
параметры как получаешь, просто так, или через $_GET["a"]?

Спустя 4 минуты, 49 секунд (19.02.2009 - 15:06) brdm написал(а):
в key.php пописываю

// Ключи как переменные ($one то-же, что и $_POST['one'])
if(isset($_GET)) {foreach ($_GET as $key=>$val) {$$key=$val;}}
if(isset($_POST)){foreach ($_POST as $key=>$val){$$key=$val;}}

Параметры передаются. Пробовал просто передаватбь один, два параметра без сериализации. Все работает.

Спустя 10 минут, 16 секунд (19.02.2009 - 15:16) Viking написал(а):
Цитата
На локальном сервере Денвер(php4) все работает прекрасно.

странно... мне казалось в пхп4 $$ не работает...


Спустя 1 час, 52 минуты, 27 секунд (19.02.2009 - 17:09) brdm написал(а):
Может и в этом дело.

А как тогда нужно сделать правильно для php5?

Спустя 35 минут, 58 секунд (19.02.2009 - 17:45) Viking написал(а):
дык в пхп5 оно и так должно работать, я говорю в пхп4 вроде не должно, но ты пишешь, что у тебя на денвере в пхп4 как раз все прекрасно пашет (ты их не перепутал?)

а вообще как-то странно, получается что ты их сериализуешь, да еще и передаешь целыми пачками, так что потом глобальные массивы форичем обходить приходится. Может у тебя в результате урл с запросом слишком длинный и ограничение срабатывает?

что-бы что-то работало в пхп4 и не работало в пхп5, за исключением глобалок из-за дефолтных настроек - с таким вроде еще не сталкивался...

Спустя 9 минут, 3 секунды (19.02.2009 - 17:54) brdm написал(а):
Перешел на Денвер (php5).

Та-же картина, что и на сервере.

Теперь о проблеме...
Делаю так (реально массив $t имеет 30 элементов, которые достаются из файла)
list($t[0],$t[1])=explode("|", "220|130|");
затем делаю $a = serialize($t);
и передаю <img src=http://test.ru/php/key.php?a=$a , где делаю десериализацию и размещаю где нужно на картинке (НЕ РАБОТАЕТ)

Теперь делаю так
$t[0] = 220;
$t[1] = 130;

Все работает как надо.

Что здесь не так?

Спустя 14 минут, 57 секунд (19.02.2009 - 18:09) Viking написал(а):
Цитата
Теперь делаю так
$t[0] = 220;
$t[1] = 130;

Все работает как надо.

дык это и с сериализацией работает, или это ты на приемнике делаешь?

повставляй var_dump($t); в подозрительных местах
так инфы всеравно мало
вообще кроме глобалок я даже предположить ничего не могу, проверь, может ты все-таки где-то переменную из урла на прямую берешь?

Спустя 45 минут, 35 секунд (19.02.2009 - 18:54) brdm написал(а):
Ну да , конечно, тоже с сериализацией.

$t[0] = 220;
$t[1] = 130;

затем serialize($t);

Все работает.

Спустя 21 минута, 35 секунд (19.02.2009 - 19:16) Viking написал(а):
ну вот перед сериализацией поставь var_dump($t); и сравни чем результаты отличаются

Спустя 1 час, 17 минут, 21 секунда (19.02.2009 - 20:33) brdm написал(а):
Так я и думал. Строка получается. Вернее строки.

Если делаю

list($t[0],$t[1])=explode("|", "220|130|");

var_dump($t); то выдает

array(2) { [1]=> string(3) "130" [0]=> string(3) "220" }

если

$t[0] = 150;
$t[1] = 230;

var_dump($t); то выдает

array(2) { [1]=> int(230) [0]=> int(150) }

Получается, что таким образом list($t[0],$t[1])=explode("|", "220|130|"); получить данные в числовом виде не получится. А ведь у меня в файле они хранятся именно так. Хотя странно. На Денвер php4 все нормально работало.

И, что-ж теперь делать?

Спустя 16 минут, 17 секунд (19.02.2009 - 20:49) kirik написал(а):
Цитата (brdm @ 19.02.2009 - 12:33)
"220|130|"

Это у тебя строка, а что сделать если строку разделить пополам? Получится две строки. smile.gif
Приводи просто каждый элемент массива к целочисленным.
PHP
list($t[0],$t[1]) = explode('|', '220|130|');
$t = array_map('intval', $t);

var_dump($t);


А лучше сериализуй массив.

Спустя 8 минут, 50 секунд (19.02.2009 - 20:58) brdm написал(а):
Большое спасибо.

Кажется все получилось. Даже не кажется, а работает.

Только вот, как-же оно всетаки работало на Denwer (php4)?

Наверное нужно все-же ставить нормальный локальный сервер.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.