2 error_reporting(E_ALL | E_STRICT);
4 define('__STEP_32' , 3);
5 define('__LEFT_32' , 0xffff0000);
6 define('__RIGHT_32' , 0x0000ffff);
7 define('__FACTOR_32', 16);
8 define('__FORMAT_WRITE_32', 'II');
10 define('__STEP_64' , 7);
11 define('__LEFT_64' , 0xffffffff00000000);
12 define('__RIGHT_64' , 0x00000000ffffffff);
13 define('__FACTOR_64', 32);
14 define('__FORMAT_WRITE_64', 'NN');
17 $__factor = constant('__FACTOR_32');
18 $__left = constant('__LEFT_32');
19 $__right = constant('__RIGHT_32');
20 $__format = constant('__FORMAT_WRITE_32');
21 $__step = constant('__STEP_32');
23 if (PHP_INT_SIZE === 8) {
25 $__factor = constant('__FACTOR_64');
26 $__left = constant('__LEFT_64');
27 $__right = constant('__RIGHT_64');
28 $__format = constant('__FORMAT_WRITE_64');
29 $__step = constant('__STEP_64');
32 $str = gzcompress(file_get_contents('test.data'), 9);
36 for ($idx = 0; $idx < strlen($str); $idx += $__step) {
38 for ($i = 0; $i < $__step; $i++) {
39 $factor = ($__step - 1 - $i);
41 if (($idx + $i) <= strlen($str)) {
42 $ord = ord(substr($str, ($idx + $i), 1));
44 $add = $ord * pow(256, $factor);
48 //print 'idx=' . $idx . ',i=' . $i . ',ord=' . $ord . ',factor=' . $factor . ',add=' . $add . ',big=' . $big . PHP_EOL;
52 $l = ($big & $__left) >>$__factor;
55 $unpacked = str_pad(pack($__format, $l, $r), 8, '0', STR_PAD_LEFT);
56 //print 'big=' . $big . ',unpacked('.strlen($unpacked) . ')='.md5($unpacked).PHP_EOL;
58 $encoded .= $unpacked;
61 print 'Hash(' . strlen($encoded) . ')=' . md5($encoded) . PHP_EOL;
62 print 'Encoded ' . strlen($str) . ' bytes into ' . strlen($encoded) . ' bytes ...' . PHP_EOL;
64 file_put_contents('test.data.bin' . ($__factor * 2), $encoded);
66 print 'File size is: ' . filesize('test.data.bin' . ($__factor * 2)) . ' bytes.' . PHP_EOL;