php unserialize работает по-разному на разных машинах - PullRequest
1 голос
/ 15 декабря 2011

У меня есть массив, который был сериализован с помощью php, результат:

unserialize('a:2:{s:13:"custom_basket";a:1:{i:280583837398;a:4:{s:12:"product_name";s:0:"";s:8:"quantity";s:1:"1";s:5:"price";d:38.649999999999999;s:11:"description";a:7:{s:2:"id";s:12:"280583837398";s:3:"sku";s:0:"";s:4:"site";s:2:"UK";s:12:"condition_id";s:4:"1000";s:14:"transaction_id";s:12:"773563256018";s:8:"platform";s:4:"eBay";s:18:"order_line_item_id";s:25:"280583837398-773563256018";}}}s:6:"basket";a:0:{}}')

Когда я использую свой компьютер с запущенным php 5.3.5, я получаю:

Уведомление: unserialize () [function.unserialize]: Ошибка по смещению 46 из 405 байт

Когда чувак рядом со мной запускает его на своей машине под управлением 5.3.6, он возвращает массив обратно.Наш сервер, на котором работает php 5.3.4, также успешно десериализует массив.

Ошибка, которую я получаю, указывает на первый ключ во втором массиве i:280583837398, если я тоже это изменю s:12:"280583837398" моя машина теперь может десериализоватьсямассив успешно.

Кто-нибудь знает, почему это происходит.Я понятия не имею, является ли это версией php, я только что заметил, что у меня была версия, отличная от двух успешных машин, поэтому подумал, что стоит упомянуть.

Я запускаю MAMP PRO на Snow Leopard, если это поможет.

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Не уверен, является ли это версией или нет, но, возможно, разные версии обрабатывают целые по-разному. Кажется, вы понимаете, что s означает строку x длины, следовательно, s: 12 - строка длины 12. Но если php пытается проанализировать это как 32-битное int, то это может дать сбой.

0 голосов
/ 15 декабря 2011

280583837398 - довольно большое число, возможно, ваша машина пытается установить его в integer, который поддерживает числа до 32 бит.

Вам, вероятно, нужно long, чтобы сохранить это.

Это все, что я могу сказать из этого на данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...