PhpSerializer (php_serializer v2.0.0) View Source

Link to this section Summary

Functions

Serialize Elixir data

Unserialize PHP data

Link to this section Types

Specs

error_msg() :: String.t()

Specs

excess_data() :: String.t()

Link to this section Functions

Specs

serialize(any()) :: String.t()

Serialize Elixir data

iex> PhpSerializer.serialize(123)
"i:123;"

iex> PhpSerializer.serialize([1, :some_atom, %{1 => "a", "b" => 2}])
"a:3:{i:0;i:1;i:1;s:9:\"some_atom\";i:2;a:2:{i:1;s:1:\"a\";s:1:\"b\";i:2;}}"

iex> PhpSerializer.serialize(%PhpSerializable.Class{class: "NameOfTheClass", data: "somedata"})
"C:14:\"NameOfTheClass\":8:{somedata}"
Link to this function

unserialize(str, opts \\ [])

View Source

Specs

unserialize(String.t(),
  array_to_map: boolean(),
  strict: boolean(),
  with_excess: boolean()
) ::
  {:ok, any()}
  | {:ok, any(), excess_data()}
  | {:error, error_msg(), excess_data()}
  | {:error, error_msg()}

Unserialize PHP data

iex> PhpSerializer.unserialize("a:3:{i:0;i:1;i:1;s:9:\"some_atom\";i:2;a:2:{i:1;s:1:\"a\";s:1:\"b\";i:2;}}")
{:ok, [{0, 1}, {1, "some_atom"}, {2, [{1, "a"}, {"b", 2}]}]}

iex> {:ok, data } = PhpSerializer.unserialize("a:3:{i:0;i:1;i:1;s:9:\"some_atom\";i:2;a:2:{i:1;s:1:\"a\";s:1:\"b\";i:2;}}")
iex> List.keyfind(data, 1, 0)
{1, "some_atom"}

converted to maps:

iex> PhpSerializer.unserialize("a:3:{i:0;i:1;i:1;s:9:\"some_atom\";i:2;a:2:{i:1;s:1:\"a\";s:1:\"b\";i:2;}}", array_to_map: true)
{:ok, %{0 => 1, 1 => "some_atom", 2 => %{1 => "a", "b" => 2}}}

with excess data:

iex> PhpSerializer.unserialize("i:0;i:34;")
{:ok, 0}

iex> PhpSerializer.unserialize("i:0;i:34;", with_excess: true)
{:ok, 0, "i:34;"}

iex> PhpSerializer.unserialize("i:0;i:34;", strict: true)
{:error, "excess characters found"}

iex> PhpSerializer.unserialize("i:0;i:34;", strict: true, with_excess: true)
{:error, "excess characters found", "i:34;"}