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