2015-10-10 6 views
0

У меня есть PHP-скрипт (называемый клиентом), который получает запрос от PHP-скрипта (называемого сервером) на другом сервере. Сервер упорядочивает эти данные и отправляет его клиенту:Unserialize() не работает

stdClass Object (
    [version] => 0.3 
    [date] => 2010-04-10 
    [package] => http://my.site/test-plugin-update/test-plugin-update.zip 
    [slug] => test-plugin-update 
    [new_version] => 0.3 
) 

клиент берет и unserializes это так: $response = unserialize($raw_response['body'])

Но $response пуста!

Если я делаю это: var_dump(unserialize($raw_response['body'])) я получаю это: bool(false)

Если я делаю это: print_r($raw_response['body']) я получаю это:

O:8:"stdClass":5:{s:7:"version";s:3:"0.3";s:4:"date";s:10:"2010-04-10";s:7:"package";s:56:"http://my.site/test-plugin-update/test-plugin-update.zip";s:4:"slug";s:18:"test-plugin-update";s:11:"new_version";s:3:"0.3";} 

Если я вручную вставить что внутри в unserialize() вызова, я получаю красивый объект, как это:

stdClass Object (
    [version] => 0.3 
    [date] => 2010-04-10 
    [package] => http://my.site/test-plugin-update/test-plugin-update.zip 
    [slug] => test-plugin-update 
    [new_version] => 0.3 
) 

Любая идея, почему я получаю такого рода поведение, или то, что я могу сделать, чтобы unserial Измерить строку программно?

+0

Что вы получаете от 'var_dump (serialize ($ raw_response ['body']))'? – melpomene

+0

@melpomene Вот что я получаю - сериализованная строка внутри сериализованной строки: 's: 217:" O: 8: "stdClass": 5: {s: 7: "version"; s: 3: "0.3"; с: 4: "дата"; s: 10: "2010-04-10"; s: 7: "пакет"; s: 56: "http://my.site/test-plugin-update/test-plugin -update.zip "; s: 4:" пробкового "; s: 18:" тест-плагин-обновление "; s: 11:" NEW_VERSION "; s: 3:" 0,3 ";}"; ' –

ответ

0

Я попросил вас запустить

var_dump(serialize($raw_response['body'])); 

Вы получили выход

s:217:" O:8:"stdClass":5:{s:7:"version";s:3:"0.3";s:4:"date";s:10:"2010-04-10";s:7:"pack‌​age";s:56:"http://my.site/test-plugin-update/test-plugin-update.zip";s:4:"slug";s‌​:18:"test-plugin-update";s:11:"new_version";s:3:"0.3";}"; 

Как вы можете видеть в начале (s:217:" 0:8 ...), у вас есть пробел перед фактической serialize продукции начинается. Когда я пытаюсь сделать unserialize, я получаю это уведомление: unserialize(): Error at offset 0 of 217 bytes (смещение 0, потому что unserialize не ожидает пробела в начале).

Правильное решение заключается в том, чтобы выяснить, почему ваш сервер добавляет пространство перед отправкой сериализованного вывода и исправляет это.

Но как обходной путь, вероятно, можно сделать

var_dump(unserialize(preg_replace('/^\s+/', '', $raw_response['body']))); 

на клиенте.

Смежные вопросы