php-serial 0.9.0 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +20 -3
- data/lib/php-serial.rb +73 -64
- data/lib/php-serial/version.rb +1 -1
- data/test/php_serial_test.rb +12 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
# Php
|
1
|
+
# Php-Serial
|
2
2
|
|
3
|
-
|
3
|
+
PHP serialization library. Reads and writes PHP's serialization format.
|
4
|
+
Also has support for reading and writing PHP sessions.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -18,7 +19,23 @@ Or install it yourself as:
|
|
18
19
|
|
19
20
|
## Usage
|
20
21
|
|
21
|
-
|
22
|
+
This library provides 4 public methods:
|
23
|
+
Php.serialize
|
24
|
+
|
25
|
+
Php.serilialize ['string', 100]
|
26
|
+
=> "a:2:{i:0;s:6:\"string\";i:1;i:100;}"
|
27
|
+
Php.unserialize
|
28
|
+
|
29
|
+
Php.unserialize "a:2:{i:0;s:6:\"string\";i:1;i:100;}"
|
30
|
+
=> ["string", 100]
|
31
|
+
Php.serialize_session
|
32
|
+
|
33
|
+
Php.unserialize_session "var_a|s:6:\"string\";var_b|d:3.14"
|
34
|
+
=> {"var_a"=>"string", "var_b"=>3.14}
|
35
|
+
Php.unserialize_session
|
36
|
+
|
37
|
+
Php.unserialize_session {"var_a"=>"string", "var_b"=>3.14}
|
38
|
+
=> "var_a|s:6:\"string\";var_b|d:3.14"
|
22
39
|
|
23
40
|
## Contributing
|
24
41
|
|
data/lib/php-serial.rb
CHANGED
@@ -1,6 +1,63 @@
|
|
1
1
|
require "php-serial/version"
|
2
2
|
|
3
3
|
module Php
|
4
|
+
# Serializes a ruby object into PHP serialized format
|
5
|
+
#
|
6
|
+
# Params:
|
7
|
+
# Mixed var
|
8
|
+
# Returns: string
|
9
|
+
def self.serialize(var)
|
10
|
+
val = ''
|
11
|
+
case var.class.to_s
|
12
|
+
when 'NilClass'
|
13
|
+
val = 'N;'
|
14
|
+
when 'Fixnum'
|
15
|
+
val = 'i:' + var.to_s + ';'
|
16
|
+
when 'Float'
|
17
|
+
val = 'd:' + var.to_s + ';'
|
18
|
+
when 'TrueClass'
|
19
|
+
val = 'b:1' + ';'
|
20
|
+
when 'FalseClass'
|
21
|
+
val = 'b:0' + ';'
|
22
|
+
when 'String', 'Symbol'
|
23
|
+
val = 's:' + var.length.to_s + ':' + '"' + var.to_s + '";'
|
24
|
+
when 'Array'
|
25
|
+
val = 'a:' + var.length.to_s + ':' + '{'
|
26
|
+
var.length.times do |index|
|
27
|
+
val += serialize(index) + serialize(var[index])
|
28
|
+
end
|
29
|
+
val += '}'
|
30
|
+
when 'Hash'
|
31
|
+
val = 'a:' + var.length.to_s + ':' + '{'
|
32
|
+
var.each do |item_key, item_value|
|
33
|
+
val += serialize(item_key) + serialize(item_value)
|
34
|
+
end
|
35
|
+
val += '}'
|
36
|
+
else
|
37
|
+
klass = var.class.to_s
|
38
|
+
val = "O:#{klass.length.to_s}:\"#{klass}\":#{var.instance_variables.length}:{"
|
39
|
+
var.instance_variables.each do |ivar|
|
40
|
+
ivar = ivar.to_s
|
41
|
+
ivar.slice!(0)
|
42
|
+
val += serialize(ivar) + serialize(var.send(ivar))
|
43
|
+
end
|
44
|
+
val += '}'
|
45
|
+
end
|
46
|
+
val
|
47
|
+
end
|
48
|
+
|
49
|
+
# Serializes a hash into PHP session
|
50
|
+
#
|
51
|
+
# Params:
|
52
|
+
# Hash hash
|
53
|
+
# Returns: string
|
54
|
+
def self.serialize_session(hash)
|
55
|
+
serialized_session = ''
|
56
|
+
hash.each do |key,value|
|
57
|
+
serialized_session += key.to_s + "|" + serialize(value)
|
58
|
+
end
|
59
|
+
serialized_session
|
60
|
+
end
|
4
61
|
|
5
62
|
# Unserializes a PHP session
|
6
63
|
#
|
@@ -13,7 +70,7 @@ module Php
|
|
13
70
|
|
14
71
|
while !data.empty? do
|
15
72
|
key = extract_until!(data, "|")
|
16
|
-
hash[key] = unserialize(data)
|
73
|
+
hash[key] = unserialize!(data)
|
17
74
|
end
|
18
75
|
hash
|
19
76
|
end
|
@@ -24,6 +81,17 @@ module Php
|
|
24
81
|
# String data
|
25
82
|
# Returns: mixed
|
26
83
|
def self.unserialize(data='')
|
84
|
+
unserialize!(data.strip)
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
# Unserializes recursively. Consumes the input string.
|
90
|
+
#
|
91
|
+
# Params:
|
92
|
+
# String data
|
93
|
+
# Returns: mixed
|
94
|
+
def self.unserialize!(data='')
|
27
95
|
var_type = data.slice!(0)
|
28
96
|
data.slice!(0)
|
29
97
|
case var_type
|
@@ -45,8 +113,8 @@ module Php
|
|
45
113
|
length = extract_until!(data, ":").to_i
|
46
114
|
extract_until!(data, '{')
|
47
115
|
length.times do
|
48
|
-
key = unserialize(data)
|
49
|
-
value[key] = unserialize(data)
|
116
|
+
key = unserialize!(data)
|
117
|
+
value[key] = unserialize!(data)
|
50
118
|
end
|
51
119
|
extract_until!(data, "}")
|
52
120
|
# if keys are sequential numbers, return array
|
@@ -60,72 +128,13 @@ module Php
|
|
60
128
|
length = extract_until!(data, ":").to_i
|
61
129
|
extract_until!(data, '{')
|
62
130
|
length.times do
|
63
|
-
key = unserialize(data)
|
64
|
-
value[key] = unserialize(data)
|
131
|
+
key = unserialize!(data)
|
132
|
+
value[key] = unserialize!(data)
|
65
133
|
end
|
66
134
|
end
|
67
135
|
value
|
68
136
|
end
|
69
137
|
|
70
|
-
# Serializes a hash into PHP session
|
71
|
-
#
|
72
|
-
# Params:
|
73
|
-
# Hash hash
|
74
|
-
# Returns: string
|
75
|
-
def self.serialize_session(hash)
|
76
|
-
serialized_session = ''
|
77
|
-
hash.each do |key,value|
|
78
|
-
serialized_session += key.to_s + "|" + serialize(value)
|
79
|
-
end
|
80
|
-
serialized_session
|
81
|
-
end
|
82
|
-
|
83
|
-
|
84
|
-
# Serializes a ruby object into PHP serialized format
|
85
|
-
#
|
86
|
-
# Params:
|
87
|
-
# Mixed var
|
88
|
-
# Returns: string
|
89
|
-
def self.serialize(var)
|
90
|
-
val = ''
|
91
|
-
case var.class.to_s
|
92
|
-
when 'NilClass'
|
93
|
-
val = 'N;'
|
94
|
-
when 'Fixnum'
|
95
|
-
val = 'i:' + var.to_s + ';'
|
96
|
-
when 'Float'
|
97
|
-
val = 'd:' + var.to_s + ';'
|
98
|
-
when 'TrueClass'
|
99
|
-
val = 'b:1' + ';'
|
100
|
-
when 'FalseClass'
|
101
|
-
val = 'b:0' + ';'
|
102
|
-
when 'String', 'Symbol'
|
103
|
-
val = 's:' + var.length.to_s + ':' + '"' + var.to_s + '";'
|
104
|
-
when 'Array'
|
105
|
-
val = 'a:' + var.length.to_s + ':' + '{'
|
106
|
-
var.length.times do |index|
|
107
|
-
val += serialize(index) + serialize(var[index])
|
108
|
-
end
|
109
|
-
val += '}'
|
110
|
-
when 'Hash'
|
111
|
-
val = 'a:' + var.length.to_s + ':' + '{'
|
112
|
-
var.each do |item_key, item_value|
|
113
|
-
val += serialize(item_key) + serialize(item_value)
|
114
|
-
end
|
115
|
-
val += '}'
|
116
|
-
else
|
117
|
-
klass = var.class.to_s
|
118
|
-
val = "O:#{klass.length.to_s}:\"#{klass}\":#{var.instance_variables.length}:{"
|
119
|
-
var.instance_variables.each do |ivar|
|
120
|
-
ivar = ivar.to_s
|
121
|
-
ivar.slice!(0)
|
122
|
-
val += serialize(ivar) + serialize(var.send(ivar))
|
123
|
-
end
|
124
|
-
val += '}'
|
125
|
-
end
|
126
|
-
val
|
127
|
-
end
|
128
|
-
|
129
138
|
# Return all characters up to the first occurrence of char
|
130
139
|
# Truncates those characters from input string
|
131
140
|
#
|
data/lib/php-serial/version.rb
CHANGED
data/test/php_serial_test.rb
CHANGED
@@ -126,6 +126,12 @@ describe 'Unserialize' do
|
|
126
126
|
expected = {"class" => "Person", "first_name" => "John", "last_name" => "Doe"}
|
127
127
|
Php.unserialize(input).must_equal expected
|
128
128
|
end
|
129
|
+
|
130
|
+
it 'should not alter the input' do
|
131
|
+
input = "serialized data"
|
132
|
+
Php.unserialize(input)
|
133
|
+
input.must_equal "serialized data"
|
134
|
+
end
|
129
135
|
end
|
130
136
|
|
131
137
|
|
@@ -167,4 +173,10 @@ describe 'Unserialize Session' do
|
|
167
173
|
}
|
168
174
|
Php.unserialize_session(input).must_equal expected
|
169
175
|
end
|
176
|
+
|
177
|
+
it 'should not alter the input' do
|
178
|
+
input = "serialized data"
|
179
|
+
Php.unserialize_session(input)
|
180
|
+
input.must_equal "serialized data"
|
181
|
+
end
|
170
182
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: php-serial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: PHP serialization/unserialization with session support
|
15
15
|
email:
|