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