Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.119.109.119] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
function.unserialize: Error at offset 65531 of 65535 bytes
что это за ошибка и как выяснить какие данные ее вызывают? у меня проблемная строчка в функции которая вызывается из разных мест много раз |
Сообщ.
#2
,
|
|
|
Цитата orb @ у меня проблемная строчка в функции которая вызывается из разных мест много раз Ну есть отладчики, да и в лоб: эхать перед каждым вызовом данные. Эхо перед ошибкой и будет данными ведь. В чем сложность? |
Сообщ.
#3
,
|
|
|
unserialize десериализирует объект из строки, в самой строке ошибка, на 65531 байте.
эхом тут мало чего прояснишь, можно лишь увидеть что конкретно "не те данные" функции скармливаете. добавлю: вот пример сериализованного массива array(a, b, c, d, e) a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;s:1:"d";i:4;s:1:"e";} если строка битая, например таккая a:5:{i:0;s:1:"a";i:1;s:1:"b";i:2;s1:"c";i:3;s:1:"d";i:4;s:1:"e";} (убрал одно двоеточие перед элементом с) то это вызовет ошибку Notice: unserialize() [function.unserialize]: Error at offset 33 of 65 bytes in |
Сообщ.
#4
,
|
|
|
Цитата Pr0[)!9Y @ Эхо перед ошибкой и будет данными ведь ошибка на 65531 символе |
Сообщ.
#5
,
|
|
|
Цитата orb @ ошибка на 65531 символе Я в PHP так еще не делал, но полагаю, что можно try ... catch и вывести подстроку +-5 символов от 65531-го... |
Сообщ.
#6
,
|
|
|
Цитата fatalist @ try ... catch и не ловит |
Сообщ.
#7
,
|
|
|
class ENotice extends Exception { } function te($code, $message, $file, $line) { if ($code == E_NOTICE) { throw new ENotice($message, $code); } } set_error_handler('te', E_NOTICE); ... try { unserialize(...); } catch (ENotice $e) { var_dump($e->getTrace()); } |
Сообщ.
#8
,
|
|
|
Цитата orb @ of 65535 Уж не закончилась ли строка раньше времени, если она из базы например? Слишком уж число круглое =) |
Сообщ.
#9
,
|
|
|
s:3:"url";s:30:"http://svet/shop/4/1/5/page_1/";}i:709;a:2:{s:4:"name";s:31 ) вот так заканчивается массив сбойный Добавлено static $i = 0; if ($i == 2) { print_r($data); die; } $data = unserialize($data[0]); Добавлено теперь другая проблема - как пофиксить ошибку |
Сообщ.
#10
,
|
|
|
Цитата Pr0[)!9Y @ Уж не закончилась ли строка раньше времени, если она из базы например? Добавлено 1) Данные откуда? 2) Исходные данные сериализуй и посмотри, может быть это на этапе сериализации проявляется. |
Сообщ.
#11
,
|
|
|
1. электронный магазин. самопал. Кто творец я не знаю
данные я знаю что такое a:2:{s:4:"name";s:21:"Modern 317";s:3:"url";s:25:"http://site/shop//page_1/";}}i:14; это один элемент товара, его линка для меню Добавлено когда начала проявлять ошибка я не знаю жду хозяина магазина и листаю логи |
Сообщ.
#12
,
|
|
|
orb,ну откуда данные то сериализованные беруться? Из сессии наврядли, из файла? из базы?
Так вот к чему клоню, если из базы, то посмотри что в этой таблице? Данные целы? Например может быть там тип поля TEXT, разработчик подумал что ему хватит навсегда, а туда помещается только 65535 символов. Добавлено Тогда менять тип поля и заносить битые данные заново. |
Сообщ.
#13
,
|
|
|
из базы данных
но проблема в том что неизвестно когда произошла ошибка и сколько данных находится в таком побитом виде |
Сообщ.
#14
,
|
|
|
Мне кажется проблему надо по шагам решать, сначала убедись что проблема в базе. Реши задачу программистскую. А пользовательскую будешь решать когда все будет работать.
Цитата orb @ Если мое предположние верно, тогда началось ровно тогда когда появился объект с длинными данными. но проблема в том что неизвестно когда произошла ошибка |
Сообщ.
#15
,
|
|
|
Цитата orb @ s:3:"url";s:30:"http://svet/shop/4/1/5/page_1/";}i:709;a:2:{s:4:"name";s:31 ) вот так заканчивается массив сбойный тут видно что массив недозаписан |