Intereting Posts
Формат даты PHP Zend Любой способ получить все строки таблицы, где внешний ключ совпадает с первичным ключом, используя только модели, а не напрямую обращаться к базе данных? Ajax-вызов не работает Что такое шаблон HMVC? Ларавель Красноречивый и множественные объединения Сбой PHP (или MySQL) при извлечении большой записи базы данных (~ 5 МБ) PHP Циклические данные, когда форма имеет разные атрибуты имени каждой строки Как сделать дерево из плоского массива – php Команда «возиться» не определена Как сделать глобальные вспомогательные функции в laravel 5? Получить постоянное имя в виде строки (Неустранимая ошибка: вызов функции-члена bind_param () для не-объекта) как остановить множественный вход пользователя с тем же адресом электронной почты и паролем, как только пользователь уже зарегистрировался Цикл через SQL и вычисление суммы в PHP Неопределенная переменная с функцией PHP

Структура строки Serialized PHP

Мне было интересно, может ли кто-нибудь указать мне ресурс, где документируются детали сериализованной строки php. Мне бы хотелось узнать формат / структуру, чтобы я мог написать функцию в VB.NET для сериализации / десериализации.

Благодаря!

Базовая структура выглядит следующим образом:

Скалярные типы:

  1. Булевы сериализуются как:

     b:<i>; 

    где <i> – целое число со значением либо 0 (false), либо 1 (true).

  2. Целые числа сериализуются как:

     i:<i>; 

    где <i> – целочисленное значение.

  3. Поплавки сериализуются как (с d означает double):

     d:<f>; 

    где <f> – значение поплавка.

  4. Строки сериализуются как:

     s:<i>:"<s>"; 

    где <i> – целое число, представляющее длину строки <s> , а <s> – строковое значение.

Специальные типы:

  1. null просто сериализуется как:

     N; 

Составные типы:

  1. Массивы сериализуются как:

     a:<i>:{<elements>} 

    где <i> – целое число, представляющее число элементов в массиве, и <elements> нулевые или более сериализованные пары значений ключа:

     <key><value> 

    где <key> представляет сериализованный скалярный тип и <value> любое значение, которое может быть сериализуемым.

  2. Объекты сериализуются как:

     O:<i>:"<s>":<i>:{<properties>} 

    где первый <i> представляет собой целое число, представляющее длину строки <s> , а <s> – полное имя класса (имя класса, добавленное с полным пространством имен). Второй <i> представляет собой целое число, представляющее число свойств объекта. <properties> представляют собой пары с нулевым числом или более сериализованными именами:

     <name><value> 

    где <name> представляет собой сериализованную строку, представляющую имя свойства, и <value> любое значение, которое сериализуется.

    Есть уловка с <name> хотя:

    <name> представляется как

     s:<i>:"<s>"; 

    где <i> – целое число, представляющее длину строки <s> . Но значения <s> различаются по видимости свойств:

    а. С общедоступными свойствами <s> – это простое имя свойства.

    б. Однако с защищенными свойствами <s> – это простое имя свойства, добавленное с помощью \0*\0 – звездочкой, заключенной в два символа NUL (т.е. chr(0) ).

    с. И с частными свойствами <s> – это простое имя свойства, добавленное с помощью \0<s>\0<s> , заключенное в два символа NUL , где <s> – это полное имя класса.


Есть еще несколько случаев, таких как R:<i>; , который представляет собой ссылки, которые я здесь не упомянул (потому что я честно не догадывался о его точной работе), но это должно дать вам приличное представление о механизме сериализации PHP.

Я нашел эту страницу в phpinternalsbook совершенно полной. Он также показывает альтернативный формат сериализации для классов, реализующих интерфейс Serializable , а также значение спецификатора формата R