На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Ошибка Error at offset 65531 of 65535 bytes
      function.unserialize: Error at offset 65531 of 65535 bytes
      что это за ошибка и как выяснить какие данные ее вызывают?

      у меня проблемная строчка в функции которая вызывается из разных мест много раз
        Цитата orb @
        у меня проблемная строчка в функции которая вызывается из разных мест много раз

        Ну есть отладчики, да и в лоб: эхать перед каждым вызовом данные. Эхо перед ошибкой и будет данными ведь. В чем сложность?
          unserialize десериализирует объект из строки, в самой строке ошибка, на 65531 байте.
          эхом тут мало чего прояснишь, можно лишь увидеть что конкретно "не те данные" функции скармливаете.

          добавлю:
          вот пример сериализованного массива array(a, b, c, d, e)
          ExpandedWrap disabled
            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";}

          если строка битая, например таккая
          ExpandedWrap disabled
            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";}

          (убрал одно двоеточие перед элементом с)
          то это вызовет ошибку
          ExpandedWrap disabled
            Notice: unserialize() [function.unserialize]: Error at offset 33 of 65 bytes in
          Сообщение отредактировано: KirSSS -
            Цитата Pr0[)!9Y @
            Эхо перед ошибкой и будет данными ведь

            ошибка на 65531 символе :whistle:
              Цитата orb @
              ошибка на 65531 символе

              Я в PHP так еще не делал, но полагаю, что можно try ... catch и вывести подстроку +-5 символов от 65531-го... :rolleyes:
                Цитата fatalist @
                try ... catch и

                не ловит
                  ExpandedWrap disabled
                    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());
                    }
                  а так ловит?
                    Цитата orb @
                    of 65535

                    Уж не закончилась ли строка раньше времени, если она из базы например? Слишком уж число круглое =)
                      ExpandedWrap disabled
                        s:3:"url";s:30:"http://svet/shop/4/1/5/page_1/";}i:709;a:2:{s:4:"name";s:31
                        )

                      вот так заканчивается массив сбойный

                      Добавлено
                      ExpandedWrap disabled
                        static $i = 0;
                        if ($i == 2) {
                              print_r($data);
                              die;
                            }
                        $data = unserialize($data[0]);
                      вот таким скриптом отладки выловил сбойные данные

                      Добавлено
                      теперь другая проблема - как пофиксить ошибку :(
                        Цитата Pr0[)!9Y @
                        Уж не закончилась ли строка раньше времени, если она из базы например?


                        Добавлено
                        1) Данные откуда?
                        2) Исходные данные сериализуй и посмотри, может быть это на этапе сериализации проявляется.
                          1. электронный магазин. самопал. Кто творец я не знаю
                          данные я знаю что такое
                          ExpandedWrap disabled
                            a:2:{s:4:"name";s:21:"Modern 317";s:3:"url";s:25:"http://site/shop//page_1/";}}i:14;

                          это один элемент товара, его линка для меню

                          Добавлено
                          когда начала проявлять ошибка я не знаю
                          жду хозяина магазина и листаю логи
                            orb,ну откуда данные то сериализованные беруться? Из сессии наврядли, из файла? из базы?
                            Так вот к чему клоню, если из базы, то посмотри что в этой таблице? Данные целы? Например может быть там тип поля TEXT, разработчик подумал что ему хватит навсегда, а туда помещается только 65535 символов.

                            Добавлено
                            Тогда менять тип поля и заносить битые данные заново.
                              из базы данных
                              но проблема в том что неизвестно когда произошла ошибка
                              и сколько данных находится в таком побитом виде
                                Мне кажется проблему надо по шагам решать, сначала убедись что проблема в базе. Реши задачу программистскую. А пользовательскую будешь решать когда все будет работать.

                                Цитата orb @

                                но проблема в том что неизвестно когда произошла ошибка
                                Если мое предположние верно, тогда началось ровно тогда когда появился объект с длинными данными.
                                  Цитата orb @
                                  ExpandedWrap disabled
                                    s:3:"url";s:30:"http://svet/shop/4/1/5/page_1/";}i:709;a:2:{s:4:"name";s:31
                                    )

                                  вот так заканчивается массив сбойный

                                  тут видно что массив недозаписан
                                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0841 ]   [ 14 queries used ]   [ Generated: 18.05.24, 10:35 GMT ]