Continued:
[core.git] / contrib / lfdb2 / write.php
1 <?php
2 error_reporting(E_ALL | E_STRICT);
3
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');
9
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');
15
16 // Default is 32-bit
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');
22
23 if (PHP_INT_SIZE === 8) {
24         // Use 64-bit
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');
30 } // END - if
31
32 $str = gzcompress(file_get_contents('test.data'), 9);
33
34 $encoded = '';
35
36 for ($idx = 0; $idx < strlen($str); $idx += $__step) {
37         $big = 0;
38         for ($i = 0; $i < $__step; $i++) {
39                 $factor = ($__step - 1 - $i);
40
41                 if (($idx + $i) <= strlen($str)) {
42                         $ord = ord(substr($str, ($idx + $i), 1));
43
44                         $add = $ord * pow(256, $factor);
45
46                         $big += $add;
47
48                         //print 'idx=' . $idx . ',i=' . $i . ',ord=' . $ord . ',factor=' . $factor . ',add=' . $add . ',big=' . $big . PHP_EOL;
49                 } // END - if
50         } // END - for
51
52         $l = ($big & $__left) >>$__factor;
53         $r = $big & $__right;
54
55         $unpacked = str_pad(pack($__format, $l, $r), 8, '0', STR_PAD_LEFT);
56         //print 'big=' . $big . ',unpacked('.strlen($unpacked) . ')='.md5($unpacked).PHP_EOL;
57
58         $encoded .= $unpacked;
59 } // END - for
60
61 print 'Hash(' . strlen($encoded) . ')=' . md5($encoded) . PHP_EOL;
62 print 'Encoded ' . strlen($str) . ' bytes into ' . strlen($encoded) . ' bytes ...' . PHP_EOL;
63
64 file_put_contents('test.data.bin' . ($__factor * 2), $encoded);
65
66 print 'File size is: ' . filesize('test.data.bin' . ($__factor * 2)) . ' bytes.' . PHP_EOL;
67
68 // [EOF]
69 ?>