2 error_reporting(E_ALL | E_STRICT);
4 define('__STEP_32' , 3);
5 define('__FACTOR_32', 16);
6 define('__FORMAT_READ_32', 'I2');
8 define('__STEP_64' , 7);
9 define('__FACTOR_64', 32);
10 define('__FORMAT_READ_64', 'N2');
13 $__factor = constant('__FACTOR_32');
14 $__format = constant('__FORMAT_READ_32');
15 $__step = constant('__STEP_32');
17 if ((isset($_SERVER['argv'][1])) && ($_SERVER['argv'][1] == '-64')) {
19 $__factor = constant('__FACTOR_64');
20 $__format = constant('__FORMAT_READ_64');
21 $__step = constant('__STEP_64');
24 $buffer = file_get_contents('test.data.bin' . ($__factor * 2)) or die('Please run write.php first!' . PHP_EOL);
26 assert(filesize('test.data.bin' . ($__factor * 2)) == strlen($buffer));
27 assert((strlen($buffer) % 8) == 0);
29 print 'Hash(' . strlen($buffer) . ')=' . md5($buffer) . PHP_EOL;
33 for ($pos = 0; $pos < strlen($buffer); $pos += 8) {
34 $part = substr($buffer, $pos, 8);
35 assert(strlen($part) == 8);
36 //print 'part='.md5($part).PHP_EOL;
37 $unpacked = unpack($__format, $part);
38 //print 'unpacked='.print_r($unpacked,true);
39 $unpacked = $unpacked[1] << $__factor | $unpacked[2];
41 //print 'unpacked=' . $unpacked . PHP_EOL;
42 for ($i = 0; $i < $__step; $i++) {
43 $factor = pow(256, ($__step - 1 - $i));
44 //print __LINE__.':i=' . $i . ',factor=' . $factor . ',unpacked=' . $unpacked . PHP_EOL;
45 $chr = ($unpacked / $factor);
46 //print __LINE__.':i=' . $i . ',chr=' . $chr . PHP_EOL;
49 $a = explode('.', $chr);
51 //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
52 $unpacked -= ($chr * $factor);
53 //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
59 //print 'chr=' . $chr . PHP_EOL;
60 $decoded .= chr($chr);
64 $decoded = gzuncompress($decoded);
66 print 'Writing ' . strlen($decoded) . ' bytes to output ...' . PHP_EOL;
67 file_put_contents('test.data.out' . ($__factor * 2), $decoded);