1--TEST--
2Test serialize() & unserialize() functions: many types
3--INI--
4serialize_precision=17
5--SKIPIF--
6<?php
7if (PHP_INT_SIZE != 4) {
8	    die("skip this test is for 32bit platform only");
9}
10?>
11--FILE--
12<?php
13/* Prototype  : proto string serialize(mixed variable)
14 * Description: Returns a string representation of variable (which can later be unserialized)
15 * Source code: ext/standard/var.c
16 * Alias to functions:
17 */
18/* Prototype  : proto mixed unserialize(string variable_representation)
19 * Description: Takes a string representation of variable and recreates it
20 * Source code: ext/standard/var.c
21 * Alias to functions:
22 */
23
24
25echo "--- Testing Various Types ---\n";
26
27/* unset variable */
28$unset_var = 10;
29unset($unset_var);
30/* array declaration */
31$arr_var = array(0, 1, -2, 3.333333, "a", array(), array(NULL));
32
33$Variation_arr = array(
34   /* Integers */
35   2147483647,
36   -2147483647,
37   2147483648,
38   -2147483648,
39
40   0xFF00123,  // hex integers
41   -0xFF00123,
42   0x7FFFFFFF,
43   -0x7FFFFFFF,
44   0x80000000,
45   -0x80000000,
46
47   01234567,  // octal integers
48   -01234567,
49
50   /* arrays */
51   array(),  // zero elements
52   array(1, 2, 3, 12345666, -2344),
53   array(0, 1, 2, 3.333, -4, -5.555, TRUE, FALSE, NULL, "", '', " ",
54         array(), array(1,2,array()), "string", new stdclass
55        ),
56   &$arr_var,  // Reference to an array
57
58  /* nulls */
59   NULL,
60   null,
61
62  /* strings */
63   "",
64   '',
65   " ",
66   ' ',
67   "a",
68   "string",
69   'string',
70   "hello\0",
71   'hello\0',
72   "123",
73   '123',
74   '\t',
75   "\t",
76
77   /* booleans */
78   TRUE,
79   true,
80   FALSE,
81   false,
82
83   /* Mixed types */
84   @TRUE123,
85   "123string",
86   "string123",
87   "NULLstring",
88
89   /* unset/undefined  vars */
90   @$unset_var,
91   @$undefined_var,
92);
93
94/* Loop through to test each element in the above array */
95for( $i = 0; $i < count($Variation_arr); $i++ ) {
96
97  echo "\n-- Iteration $i --\n";
98  echo "after serialization => ";
99  $serialize_data = serialize($Variation_arr[$i]);
100  var_dump( $serialize_data );
101
102  echo "after unserialization => ";
103  $unserialize_data = unserialize($serialize_data);
104  var_dump( $unserialize_data );
105}
106
107echo "\nDone";
108?>
109--EXPECTF--
110--- Testing Various Types ---
111
112-- Iteration 0 --
113after serialization => string(13) "i:2147483647;"
114after unserialization => int(2147483647)
115
116-- Iteration 1 --
117after serialization => string(14) "i:-2147483647;"
118after unserialization => int(-2147483647)
119
120-- Iteration 2 --
121after serialization => string(13) "d:2147483648;"
122after unserialization => float(2147483648)
123
124-- Iteration 3 --
125after serialization => string(14) "d:-2147483648;"
126after unserialization => float(-2147483648)
127
128-- Iteration 4 --
129after serialization => string(12) "i:267387171;"
130after unserialization => int(267387171)
131
132-- Iteration 5 --
133after serialization => string(13) "i:-267387171;"
134after unserialization => int(-267387171)
135
136-- Iteration 6 --
137after serialization => string(13) "i:2147483647;"
138after unserialization => int(2147483647)
139
140-- Iteration 7 --
141after serialization => string(14) "i:-2147483647;"
142after unserialization => int(-2147483647)
143
144-- Iteration 8 --
145after serialization => string(13) "d:2147483648;"
146after unserialization => float(2147483648)
147
148-- Iteration 9 --
149after serialization => string(14) "d:-2147483648;"
150after unserialization => float(-2147483648)
151
152-- Iteration 10 --
153after serialization => string(9) "i:342391;"
154after unserialization => int(342391)
155
156-- Iteration 11 --
157after serialization => string(10) "i:-342391;"
158after unserialization => int(-342391)
159
160-- Iteration 12 --
161after serialization => string(6) "a:0:{}"
162after unserialization => array(0) {
163}
164
165-- Iteration 13 --
166after serialization => string(57) "a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:12345666;i:4;i:-2344;}"
167after unserialization => array(5) {
168  [0]=>
169  int(1)
170  [1]=>
171  int(2)
172  [2]=>
173  int(3)
174  [3]=>
175  int(12345666)
176  [4]=>
177  int(-2344)
178}
179
180-- Iteration 14 --
181after serialization => string(239) "a:16:{i:0;i:0;i:1;i:1;i:2;i:2;i:3;d:3.3330000000000002;i:4;i:-4;i:5;d:-5.5549999999999997;i:6;b:1;i:7;b:0;i:8;N;i:9;s:0:"";i:10;s:0:"";i:11;s:1:" ";i:12;a:0:{}i:13;a:3:{i:0;i:1;i:1;i:2;i:2;a:0:{}}i:14;s:6:"string";i:15;O:8:"stdClass":0:{}}"
182after unserialization => array(16) {
183  [0]=>
184  int(0)
185  [1]=>
186  int(1)
187  [2]=>
188  int(2)
189  [3]=>
190  float(3.333)
191  [4]=>
192  int(-4)
193  [5]=>
194  float(-5.555)
195  [6]=>
196  bool(true)
197  [7]=>
198  bool(false)
199  [8]=>
200  NULL
201  [9]=>
202  string(0) ""
203  [10]=>
204  string(0) ""
205  [11]=>
206  string(1) " "
207  [12]=>
208  array(0) {
209  }
210  [13]=>
211  array(3) {
212    [0]=>
213    int(1)
214    [1]=>
215    int(2)
216    [2]=>
217    array(0) {
218    }
219  }
220  [14]=>
221  string(6) "string"
222  [15]=>
223  object(stdClass)#2 (0) {
224  }
225}
226
227-- Iteration 15 --
228after serialization => string(94) "a:7:{i:0;i:0;i:1;i:1;i:2;i:-2;i:3;d:3.3333330000000001;i:4;s:1:"a";i:5;a:0:{}i:6;a:1:{i:0;N;}}"
229after unserialization => array(7) {
230  [0]=>
231  int(0)
232  [1]=>
233  int(1)
234  [2]=>
235  int(-2)
236  [3]=>
237  float(3.333333)
238  [4]=>
239  string(1) "a"
240  [5]=>
241  array(0) {
242  }
243  [6]=>
244  array(1) {
245    [0]=>
246    NULL
247  }
248}
249
250-- Iteration 16 --
251after serialization => string(2) "N;"
252after unserialization => NULL
253
254-- Iteration 17 --
255after serialization => string(2) "N;"
256after unserialization => NULL
257
258-- Iteration 18 --
259after serialization => string(7) "s:0:"";"
260after unserialization => string(0) ""
261
262-- Iteration 19 --
263after serialization => string(7) "s:0:"";"
264after unserialization => string(0) ""
265
266-- Iteration 20 --
267after serialization => string(8) "s:1:" ";"
268after unserialization => string(1) " "
269
270-- Iteration 21 --
271after serialization => string(8) "s:1:" ";"
272after unserialization => string(1) " "
273
274-- Iteration 22 --
275after serialization => string(8) "s:1:"a";"
276after unserialization => string(1) "a"
277
278-- Iteration 23 --
279after serialization => string(13) "s:6:"string";"
280after unserialization => string(6) "string"
281
282-- Iteration 24 --
283after serialization => string(13) "s:6:"string";"
284after unserialization => string(6) "string"
285
286-- Iteration 25 --
287after serialization => string(13) "s:6:"hello�";"
288after unserialization => string(6) "hello�"
289
290-- Iteration 26 --
291after serialization => string(14) "s:7:"hello\0";"
292after unserialization => string(7) "hello\0"
293
294-- Iteration 27 --
295after serialization => string(10) "s:3:"123";"
296after unserialization => string(3) "123"
297
298-- Iteration 28 --
299after serialization => string(10) "s:3:"123";"
300after unserialization => string(3) "123"
301
302-- Iteration 29 --
303after serialization => string(9) "s:2:"\t";"
304after unserialization => string(2) "\t"
305
306-- Iteration 30 --
307after serialization => string(8) "s:1:"	";"
308after unserialization => string(1) "	"
309
310-- Iteration 31 --
311after serialization => string(4) "b:1;"
312after unserialization => bool(true)
313
314-- Iteration 32 --
315after serialization => string(4) "b:1;"
316after unserialization => bool(true)
317
318-- Iteration 33 --
319after serialization => string(4) "b:0;"
320after unserialization => bool(false)
321
322-- Iteration 34 --
323after serialization => string(4) "b:0;"
324after unserialization => bool(false)
325
326-- Iteration 35 --
327after serialization => string(14) "s:7:"TRUE123";"
328after unserialization => string(7) "TRUE123"
329
330-- Iteration 36 --
331after serialization => string(16) "s:9:"123string";"
332after unserialization => string(9) "123string"
333
334-- Iteration 37 --
335after serialization => string(16) "s:9:"string123";"
336after unserialization => string(9) "string123"
337
338-- Iteration 38 --
339after serialization => string(18) "s:10:"NULLstring";"
340after unserialization => string(10) "NULLstring"
341
342-- Iteration 39 --
343after serialization => string(2) "N;"
344after unserialization => NULL
345
346-- Iteration 40 --
347after serialization => string(2) "N;"
348after unserialization => NULL
349
350Done
351