Конвертер Объект JSON в Сериализованный объект PHP
Легко сериализуйте и десериализуйте данные в PHP с помощью нашего универсального инструмента PHP сериализации и десериализации. Эта онлайн-утилита подойдет разработчикам, которым нужно преобразовывать сложные структуры данных в строки для хранения, а затем восстанавливать их в исходном виде. Обрабатывайте данные точно и эффективно без установки программ. Упростите рабочий процесс разработки на PHP с помощью этого удобного и надежного инструмента.
Что делает PHP Serializer
PHP Serializer преобразует JSON в строковый формат serialize() из PHP и преобразует сериализованные строки обратно в форматированный JSON. В сериализованной форме длина строк считается в байтах, поэтому значение с буквами с диакритическими знаками имеет большую длину, чем количество символов в нём.
Десериализация никогда не создаёт объекты ваших классов: вместо этого объект возвращается как __PHP_Incomplete_Class, а имя его класса сохраняется в __PHP_Incomplete_Class_Name. Это не позволяет недоверенным входным данным запускать код. Объекты JSON преобразуются в PHP массивы со строковыми ключами.
Примеры с решениями
JSON в сериализованную строку
a:4 — это массив из четырёх элементов, и длина каждой строки указана в байтах.
- Ввод
{"name": "Ada", "age": 36, "admin": true, "tags": ["php", "json"]}- Результат
a:4:{s:4:"name";s:3:"Ada";s:3:"age";i:36;s:5:"admin";b:1;s:4:"tags";a:2:{i:0;s:3:"php";i:1;s:4:"json";}}
Сериализованная строка в JSON
В слове Zürich 6 букв, но 7 байтов в UTF-8, поэтому его длина равна s:7.
- Ввод
a:2:{s:4:"city";s:7:"Zürich";s:3:"zip";s:4:"8001";}- Результат
{ "city": "Zürich", "zip": "8001" }
Сериализованный объект
Объект не восстанавливается как настоящий экземпляр stdClass. Его имя класса и свойства показаны как данные.
- Ввод
O:8:"stdClass":1:{s:2:"id";i:7;}- Результат
{ "__PHP_Incomplete_Class_Name": "stdClass", "id": 7 }
Коды сериализованных типов
| Код | Тип | Пример |
|---|---|---|
N | нулевое значение | N; |
b | Логическое значение: 1 для true и 0 для false | b:1; |
i | Целое число | i:36; |
d | Число с плавающей точкой | d:0.5; |
s | Строка с длиной в байтах | s:3:"PHP"; |
a | Массив с количеством элементов и парами ключ—значение | a:1:{i:0;s:1:"x";} |
O | Объект с длиной и именем класса, а также количеством его свойств | O:8:"stdClass":0:{} |
Часто задаваемые вопросы
Как сериализовать данные в PHP?
Чтобы сериализовать данные в PHP, введите структуру данных (массив, объект или скалярное значение) в соответствующее поле и нажмите кнопку «Serialize». Инструмент преобразует сложные структуры данных в строковый формат для хранения, используя протокол сериализации PHP. Полученное представление можно сохранить в файле или базе данных либо передать по сети.
Как десериализовать данные в PHP?
Чтобы десериализовать данные в PHP, введите сериализованную строку (обычно она начинается с обозначений формата, например a:, s: или O:) в соответствующее поле и нажмите кнопку «Deserialize». Инструмент восстановит исходную структуру данных, включая массивы, объекты и значения.
Почему сериализация полезна в PHP?
Сериализация преобразует сложные структуры данных в строки для хранения. Это позволяет сохранять данные в файлах и базах данных, передавать их по сети, хранить данные сеансов, использовать механизмы кэширования и передавать сообщения через очереди, а также сохранять состояние объектов между запросами. Десериализация восстанавливает исходные данные для дальнейшего использования.
Какие типы данных можно сериализовать в PHP?
PHP сериализует строки, целые числа, числа с плавающей точкой, логические значения, массивы, объекты и значения NULL. При этом сохраняются ключи массивов, свойства объектов (public, protected, private), вложенные структуры и типы данных. Однако ресурсы, например подключения к базам данных или файловые дескрипторы, сериализовать нельзя — для них нужна особая обработка.
Существуют ли какие-либо соображения безопасности при десериализации данных?
Да, при десериализации недоверенных данных возможны атаки с внедрением объектов PHP. Злоумышленники могут создавать вредоносные сериализованные строки, которые запускают код через магические методы (__wakeup, __destruct). Никогда не десериализуйте пользовательский ввод или внешние данные без проверки. Для недоверенных данных используйте JSON или задайте ограничение allowed_classes.
Можно ли сериализовать и десериализовать пользовательские объекты?
Да, PHP сериализует пользовательские объекты, сохраняя все свойства и их значения. Чтобы правильно восстановить объекты, перед десериализацией необходимо загрузить определения классов. Используйте автозагрузку, подключите файлы классов или реализуйте магические методы __sleep() и __wakeup() для настройки сериализации.
Чем отличаются serialize() и JSON?
PHP serialize() сохраняет точные типы данных, приватные и защищенные свойства, а также сведения о классе объекта, но работает только в PHP. JSON не зависит от языка, удобен для чтения и веба, работает в любых языках, но не сохраняет приватные свойства и точные типы PHP. Используйте serialize() для хранения только в PHP, а JSON — для API и совместимости между системами.
Как сериализовать данные сеанса?
PHP автоматически сериализует данные сеанса ($_SESSION) для хранения между запросами. Когда вы сохраняете в сеансе массивы или объекты, PHP записывает их в файлы или базы данных, а при последующей загрузке страницы десериализует. Это позволяет сохранять состояние пользователя, содержимое корзины и данные аутентификации между посещениями страниц.
Можно ли хранить сериализованные данные в базах данных?
Да, сериализованные данные можно хранить в столбцах базы данных типа TEXT или BLOB. Однако такой формат не позволяет эффективно выполнять запросы, индексировать и искать данные. Используйте сериализацию для хранения целых объектов как отдельных единиц, а для запросов к отдельным полям и связям между данными предпочитайте JSON или нормализованные таблицы.
Как выглядят сериализованные данные PHP?
Сериализованные данные имеют префиксы формата: s:5:"hello" (строка), i:42 (целое число), a:2:{...} (массив), O:4:"User" (объект). Числа обозначают длину или количество элементов. Формат компактен, но его трудно читать. Используйте наш инструмент, чтобы преобразовывать сериализованные данные в формате PHP в удобный для чтения JSON и обратно для отладки и обработки данных.
Как отладить сериализованные данные?
Десериализуйте данные, чтобы проверить их структуру, используйте print_r() или var_dump() для десериализованных значений, преобразуйте в JSON для удобства чтения, проверьте неполную сериализацию или повреждения, проверьте доступность классов для объектов, а также используйте наш инструмент для визуализации и понимания сложных сериализованных структур.
Можно ли сериализовать закрытые или анонимные функции?
Стандартная сериализация PHP не поддерживает замыкания. Для этого используйте пакеты, например Opis Closure или SerializableClosure из Laravel. Обычные функции и методы объектов можно сериализовать, если они определены в классах, а анонимные функции требуют специальной обработки.
Что такое магические методы сериализации?
__sleep() вызывается перед сериализацией и возвращает массив свойств для сериализации (это удобно, если нужно исключить некоторые данные). __wakeup() вызывается после десериализации для инициализации. __serialize() и __unserialize() (начиная с PHP 7.4) дают больше контроля. Реализуйте эти методы в классах, чтобы настроить сериализацию.
Как перейти от сериализованных данных к JSON?
Десериализуйте существующие данные PHP и преобразуйте их в массивы или объекты stdClass, затем закодируйте с помощью JSON. Обновите код, заменив serialize()/unserialize() на json_encode()/json_decode(). JSON безопаснее, удобнее для чтения и совместимее, но при этом не сохраняются приватные свойства и точные типы, которые сохраняет сериализация.