Сериализация данных в PHP…
Ex.clusive | 12.01.2011Продолжаем пополнять “коллекцию” статей с меткой “Для новичка”, в рамках которой я ранее рассказывал о Выводе информации о сервере посредством PHP и Краткой записи операторов на PHP. Сегодня же предлагаю вашему вниманию немного полезной информации о так называемой “сериализации данных” в PHP…
Теория
Что же такое сериализация? Это процесс, посредством которого сложная структура данных, например, массив или объект (который не может быть передан в форму или базу данных непосредственно), преобразуется в строку с помощью некоторого обратимого метода. Если выражаться более простым языком – когда вам требуется, допустим, забить в базу или передать через форму не просто одно значение, а целый объект PHP, к примеру двумерный массив, вы не можете передать его каким-бы то не было методом непосредственно (технические возможности не позволят это сделать) – вот тут на помощь и приходит функция “сериализации”, которая преобразует передаваемый объект и вернёт его в виде простого набора символов, который уже может быть легко обработан любым подходящим методом.
Функции для сериализации
В то время как для сериализации сложных структур данных обычно создается собственная функция, ceриализацию любой переменной PHP можно осуществить с помощью функции serialize (). Ее синтаксис выглядит следующим образом: serialize($input), где $input – структура данных для сериализации. Данная функция возвращает строковое представление входных данных.
Пример использования функции:
<?php $a = array("field1" => "text", "field2" => "text", 0 => 3, 1 => "text4"); $b = serialize($a); ?>
При этом переменная $b после сериализации будет содержать следующую строку:
a:4:{s:6:"field1";s:4:"text";s:6:"field2";s:4:"text";i:0;i:3;i:1;s:5:"text4";}
Как вы можете видеть из содержимого переменной – данную строку также нельзя непосредственно записать в базу данных или передать с помощью http-протокола, так как она содержит недопустимые символы. Для решения этой проблемы в наше распоряжение поступают различные методы. Например, если данные нужно сохранить строку в базе данных, то подойдет простое использование функции addslashes(), которая “заэкранирует” все служебные символы. При работе с НТТР-нротоколом нужно использовать функцию urlencode().
После этого, полученная строка может быть передана как элемент html-формы, записана в базу данных или сохранена в файл для дальнейшего использования.
Для восстановления структуры данных из ее сериализованного представления в PHP предусмотрена следующая функция:
unserialize($input_string [, $callback_function])
,где $input_string представляет сериализированную ранее строку для восстановления, а $callback_function — имя необязательной функции обратного вызова для использования, если unserialize() реконструирует объект, который не был определен.
Вместо заключения
Не стоит забывать, что если сериализованная строка перед записью в базу или в файл была обработана функцией типа addslashes() и др. – необходимо перед использование unserialize() применить обратную функцию, т.е. в случае использования addslashes() это stripslashes().
На этом, собственно, основы применения сериализации данных в PHP заканчиваются (относительно, конечно же). Более подробно вы сможете узнать об этом достаточно важном процессе на просторах глобальной сети, либо из одной из книг по разработке веб-приложений на PHP, которыми я обещаю поделиться в течении ближайшей недели. К слову, среди них вы найдёте очень качественные сканы таких книг как “PHP 5: Unleashed” Джона Коггзолла и “PHP 5 В подлиннике” Дмитрия Котерова и Алексея Костарева.
P.S: а Вы знаете интересные примеры применения сериализации данных?
[...] Читать далее: Сериализация данных в PHP… [...]
Паршивенький у тебя блог, я скопирую у тебя пару статеек к себе на говноблог? Вот сюда я разместил твой пост:http://wordpresse.ru/articles/webmaster-lab/serializaciya-dannyx-v-php/ и все заходите, посмотрите сколько я уже статей накопировал с ваших неудачных блогов
Спасибо за интересную статью.
Хотелось бы узнать для какой цели надо передавать эту белиберду браузеру?
Статья конечно позновательная, но для чего это делается?
Делается это например для того что бы загнать в одну куку какие ни будь данные. зачем? – спросите вы, ну например при реализации корзины в интрнет магазине, где корзина будет работать на аяксе, и нужно что бы в куках всегда были сведения о текущих покупках, к примеру ввиде id => количество
Ну и т.п. Вообще вариантов масса.
Опять же к примеру что бы загнать в одну ячейку таблицы какой ни будь массив данных. К примеру при реализации системы прав доступа, скажем в нужно что бы для каждого администратора хранился отдельнй список разделов админки в которые они имеют доступ, при этом разделы при масштабировании сайта могут добавляться/удаляться.
Тогда просто формируем одномерный массив, со всеми папками к которым есть доступ, и гоним в базу. Потом соответственно извлекаем из неё и работаем.
Хорошый метод. Я его очень часто использую в своих скриптах. Очень стабильный способ который прекрастно передает данные без их утери.
Автору спасибо. Хорошая ознакомительная статья.
Вот статья на эту же тему, но с более детальной проработкой примера. Возможно кому-то поможет лучше разобраться в теме.
http://lifeexample.ru/php-primeryi-skriptov/serializatsiya-php.html
Спасибо.
Артём Грибеньков, удачного бана вам :D
Чего удалил мой коммент? Что там было?
Какой именно коммент? Возможно под какой-нибудь из фильтров попал случайно.
Выше который)
“Артём Грибеньков, удачного бана вам :D” – написано теперь…
Спасибо за статью!!!
А кстати я полностью согласен с Сержом: “Артем Грибеньков – ты гондон и пидораз. Извеняюсь за такие выражение но за такое посылать тебя Артём надо на ***”. Автор видишь старается свой сайт трудом продвинуть а этот грабит у него статьи и ещё говорит что это говносайт. Ты нажрался!!! Извиняюсь перед несовершенолетними за мои жёсткие фразы!!!