19 {
20 $ThisFileInfo['fileformat'] = 'tar';
21 $ThisFileInfo['tar']['files'] = array();
22
23 $unpack_header = 'a100fname/a8mode/a8uid/a8gid/a12size/a12mtime/a8chksum/a1typflag/a100lnkname/a6magic/a2ver/a32uname/a32gname/a8devmaj/a8devmin/a155/prefix';
24 $null_512k = str_repeat("\0", 512);
25
26 @fseek($fd, 0);
27 while (!feof($fd)) {
28 $buffer = fread($fd, 512);
29
30
31 $checksum = 0;
32 for ($i = 0; $i < 148; $i++) {
33 $checksum += ord($buffer{$i});
34 }
35 for ($i = 148; $i < 156; $i++) {
36 $checksum += ord(' ');
37 }
38 for ($i = 156; $i < 512; $i++) {
39 $checksum += ord($buffer{$i});
40 }
41 $attr = unpack($unpack_header, $buffer);
42 $name = trim(@$attr['fname']);
43 $mode = octdec(trim(@$attr['mode']));
44 $uid = octdec(trim(@$attr['uid']));
45 $gid = octdec(trim(@$attr['gid']));
46 $size = octdec(trim(@$attr[
'size']));
47 $mtime = octdec(trim(@$attr['mtime']));
48 $chksum = octdec(trim(@$attr['chksum']));
49 $typflag = trim(@$attr['typflag']);
50 $lnkname = trim(@$attr['lnkname']);
51 $magic = trim(@$attr['magic']);
52 $ver = trim(@$attr['ver']);
53 $uname = trim(@$attr['uname']);
54 $gname = trim(@$attr['gname']);
55 $devmaj = octdec(trim(@$attr['devmaj']));
56 $devmin = octdec(trim(@$attr['devmin']));
57 $prefix = trim(@$attr['prefix']);
58 if (($checksum == 256) && ($chksum == 0)) {
59
60 break;
61 }
62 if ($prefix) {
63 $name = $prefix.'/'.$name;
64 }
65 if ((preg_match('#/$#', $name)) && !$name) {
66 $typeflag = 5;
67 }
68 if ($buffer == $null_512k) {
69
70 break;
71 }
72
73
74 fseek($fd,
$size, SEEK_CUR);
75
77 if ($diff != 0) {
78
79 fseek($fd, (512 - $diff), SEEK_CUR);
80 }
81
82 if ($name == '') {
83 break;
84 }
85 $ThisFileInfo['tar']['file_details'][$name] = array (
86 'name' => $name,
87 'mode_raw' => $mode,
89 'uid' => $uid,
90 'gid' => $gid,
92 'mtime' => $mtime,
93 'chksum' => $chksum,
95 'linkname' => $lnkname,
96 'magic' => $magic,
97 'version' => $ver,
98 'uname' => $uname,
99 'gname' => $gname,
100 'devmajor' => $devmaj,
101 'devminor' => $devmin
102 );
104 }
105 return true;
106 }
CreateDeepArray($ArrayPath, $Separator, $Value)
array_merge_clobber($array1, $array2)