26 {
27 $info = &$this->getid3->info;
28
29 $info[
'fileformat'] =
'tar';
30 $info[
'tar'][
'files'] = array();
31
32 $unpack_header = 'a100fname/a8mode/a8uid/a8gid/a12size/a12mtime/a8chksum/a1typflag/a100lnkname/a6magic/a2ver/a32uname/a32gname/a8devmaj/a8devmin/a155prefix';
33 $null_512k = str_repeat("\x00", 512);
34
36 while (!
feof($this->getid3->fp)) {
37 $buffer = $this->
fread(512);
38 if (strlen($buffer) < 512) {
39 break;
40 }
41
42
43 $checksum = 0;
44 for (
$i = 0;
$i < 148;
$i++) {
45 $checksum += ord($buffer{
$i});
46 }
47 for (
$i = 148;
$i < 156;
$i++) {
48 $checksum += ord(' ');
49 }
50 for (
$i = 156;
$i < 512;
$i++) {
51 $checksum += ord($buffer{
$i});
52 }
53 $attr = unpack($unpack_header, $buffer);
54 $name = (isset($attr[
'fname'] ) ? trim($attr[
'fname'] ) :
'');
55 $mode = octdec(isset($attr['mode'] ) ? trim($attr['mode'] ) : '');
56 $uid = octdec(isset($attr['uid'] ) ? trim($attr['uid'] ) : '');
57 $gid = octdec(isset($attr['gid'] ) ? trim($attr['gid'] ) : '');
58 $size = octdec(isset($attr[
'size'] ) ? trim($attr[
'size'] ) :
'');
59 $mtime = octdec(isset($attr['mtime'] ) ? trim($attr['mtime'] ) : '');
60 $chksum = octdec(isset($attr['chksum'] ) ? trim($attr['chksum'] ) : '');
61 $typflag = (isset($attr['typflag']) ? trim($attr['typflag']) : '');
62 $lnkname = (isset($attr['lnkname']) ? trim($attr['lnkname']) : '');
63 $magic = (isset($attr['magic'] ) ? trim($attr['magic'] ) : '');
64 $ver = (isset($attr['ver'] ) ? trim($attr['ver'] ) : '');
65 $uname = (isset($attr['uname'] ) ? trim($attr['uname'] ) : '');
66 $gname = (isset($attr['gname'] ) ? trim($attr['gname'] ) : '');
67 $devmaj = octdec(isset($attr['devmaj'] ) ? trim($attr['devmaj'] ) : '');
68 $devmin = octdec(isset($attr['devmin'] ) ? trim($attr['devmin'] ) : '');
69 $prefix = (isset($attr['prefix'] ) ? trim($attr['prefix'] ) : '');
70 if (($checksum == 256) && ($chksum == 0)) {
71
72 break;
73 }
74 if ($prefix) {
76 }
78 $typeflag = 5;
79 }
80 if ($buffer == $null_512k) {
81
82 break;
83 }
84
85
87
89 if ($diff != 0) {
90
91 $this->
fseek((512 - $diff), SEEK_CUR);
92 }
93
95 break;
96 }
99 'mode_raw' => $mode,
100 'mode' => self::display_perms($mode),
101 'uid' => $uid,
102 'gid' => $gid,
104 'mtime' => $mtime,
105 'chksum' => $chksum,
106 'typeflag' => self::get_flag_type($typflag),
107 'linkname' => $lnkname,
108 'magic' => $magic,
109 'version' => $ver,
110 'uname' => $uname,
111 'gname' => $gname,
112 'devmajor' => $devmaj,
113 'devminor' => $devmin
114 );
116 }
117 return true;
118 }
fseek($bytes, $whence=SEEK_SET)
static CreateDeepArray($ArrayPath, $Separator, $Value)
static array_merge_clobber($array1, $array2)