Теория
Что же такое сериализация? Это процесс, посредством которого сложная структура данных, например, массив или объект (который не может быть передан в форму или базу данных непосредственно), преобразуется в строку с помощью некоторого обратимого метода. Если выражаться более простым языком – когда вам требуется, допустим, забить в базу или передать через форму не просто одно значение, а целый объект PHP, к примеру двумерный массив, вы не можете передать его каким-бы то не было методом непосредственно (технические возможности не позволят это сделать) – вот тут на помощь и приходит функция “сериализации”, которая преобразует передаваемый объект и вернёт его в виде простого набора символов, который уже может быть легко обработан любым подходящим методом.
Функции для сериализации
В то время как для сериализации сложных структур данных обычно создается собственная функция, ceриализацию любой переменной PHP можно осуществить с помощью функции serialize (). Ее синтаксис выглядит следующим образом: serialize($input), где $input – структура данных для сериализации. Данная функция возвращает строковое представление входных данных.
Пример использования функции:
"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 В подлиннике” Дмитрия Котерова и Алексея Костарева.