ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
GetId3\Module\Archive\Tar Class Reference

GetId3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //. More...

+ Inheritance diagram for GetId3\Module\Archive\Tar:
+ Collaboration diagram for GetId3\Module\Archive\Tar:

Public Member Functions

 analyze ()
 
 display_perms ($mode)
 Parses the file mode to file permissions. More...
 
 get_flag_type ($typflag)
 Converts the file type. More...
 
- Public Member Functions inherited from GetId3\Handler\BaseHandler
 __construct (GetId3Core $getid3, $call_module=null)
 
 analyze ()
 Analyze from file pointer. More...
 
 AnalyzeString (&$string)
 Analyze from string instead. More...
 
 saveAttachment (&$ThisFileInfoIndex, $filename, $offset, $length)
 

Additional Inherited Members

- Protected Member Functions inherited from GetId3\Handler\BaseHandler
 ftell ()
 
 fread ($bytes)
 
 fseek ($bytes, $whence=SEEK_SET)
 
 feof ()
 
 isDependencyFor ($module)
 
 error ($text)
 
 warning ($text)
 
- Protected Attributes inherited from GetId3\Handler\BaseHandler
 $getid3
 
 $data_string_flag = false
 
 $data_string = ''
 
 $data_string_position = 0
 
 $data_string_length = 0
 

Detailed Description

GetId3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //.

module for analyzing TAR files

Author
James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g
Mike Mozolin <teddybearØmail*ru> http://www.getid3.org

Definition at line 35 of file Tar.php.

Member Function Documentation

◆ analyze()

GetId3\Module\Archive\Tar::analyze ( )
Returns
boolean

Reimplemented from GetId3\Handler\BaseHandler.

Definition at line 42 of file Tar.php.

43 {
44 $info = &$this->getid3->info;
45
46 $info['fileformat'] = 'tar';
47 $info['tar']['files'] = array();
48
49 $unpack_header = 'a100fname/a8mode/a8uid/a8gid/a12size/a12mtime/a8chksum/a1typflag/a100lnkname/a6magic/a2ver/a32uname/a32gname/a8devmaj/a8devmin/a155prefix';
50 $null_512k = str_repeat("\x00", 512); // end-of-file marker
51
52 fseek($this->getid3->fp, 0);
53 while (!feof($this->getid3->fp)) {
54 $buffer = fread($this->getid3->fp, 512);
55 if (strlen($buffer) < 512) {
56 break;
57 }
58
59 // check the block
60 $checksum = 0;
61 for ($i = 0; $i < 148; $i++) {
62 $checksum += ord($buffer{$i});
63 }
64 for ($i = 148; $i < 156; $i++) {
65 $checksum += ord(' ');
66 }
67 for ($i = 156; $i < 512; $i++) {
68 $checksum += ord($buffer{$i});
69 }
70 $attr = unpack($unpack_header, $buffer);
71 $name = (isset($attr['fname']) ? trim($attr['fname']) : '');
72 $mode = octdec(isset($attr['mode']) ? trim($attr['mode']) : '');
73 $uid = octdec(isset($attr['uid']) ? trim($attr['uid']) : '');
74 $gid = octdec(isset($attr['gid']) ? trim($attr['gid']) : '');
75 $size = octdec(isset($attr['size']) ? trim($attr['size']) : '');
76 $mtime = octdec(isset($attr['mtime']) ? trim($attr['mtime']) : '');
77 $chksum = octdec(isset($attr['chksum']) ? trim($attr['chksum']) : '');
78 $typflag = (isset($attr['typflag']) ? trim($attr['typflag']) : '');
79 $lnkname = (isset($attr['lnkname']) ? trim($attr['lnkname']) : '');
80 $magic = (isset($attr['magic']) ? trim($attr['magic']) : '');
81 $ver = (isset($attr['ver']) ? trim($attr['ver']) : '');
82 $uname = (isset($attr['uname']) ? trim($attr['uname']) : '');
83 $gname = (isset($attr['gname']) ? trim($attr['gname']) : '');
84 $devmaj = octdec(isset($attr['devmaj']) ? trim($attr['devmaj']) : '');
85 $devmin = octdec(isset($attr['devmin']) ? trim($attr['devmin']) : '');
86 $prefix = (isset($attr['prefix']) ? trim($attr['prefix']) : '');
87 if (($checksum == 256) && ($chksum == 0)) {
88 // EOF Found
89 break;
90 }
91 if ($prefix) {
92 $name = $prefix . '/' . $name;
93 }
94 if ((preg_match('#/$#', $name)) && !$name) {
95 $typeflag = 5;
96 }
97 if ($buffer == $null_512k) {
98 // it's the end of the tar-file...
99 break;
100 }
101
102 // Read to the next chunk
103 fseek($this->getid3->fp, $size, SEEK_CUR);
104
105 $diff = $size % 512;
106 if ($diff != 0) {
107 // Padding, throw away
108 fseek($this->getid3->fp, (512 - $diff), SEEK_CUR);
109 }
110 // Protect against tar-files with garbage at the end
111 if ($name == '') {
112 break;
113 }
114 $info['tar']['file_details'][$name] = array(
115 'name' => $name,
116 'mode_raw' => $mode,
117 'mode' => self::display_perms($mode),
118 'uid' => $uid,
119 'gid' => $gid,
120 'size' => $size,
121 'mtime' => $mtime,
122 'chksum' => $chksum,
123 'typeflag' => self::get_flag_type($typflag),
124 'linkname' => $lnkname,
125 'magic' => $magic,
126 'version' => $ver,
127 'uname' => $uname,
128 'gname' => $gname,
129 'devmajor' => $devmaj,
130 'devminor' => $devmin
131 );
132 $info['tar']['files'] = Helper::array_merge_clobber($info['tar']['files'],
133 Helper::CreateDeepArray($info['tar']['file_details'][$name]['name'],
134 '/',
135 $size));
136 }
137
138 return true;
139 }
$size
Definition: RandomTest.php:79
fseek($bytes, $whence=SEEK_SET)
static array_merge_clobber($array1, $array2)
Definition: Helper.php:561
static CreateDeepArray($ArrayPath, $Separator, $Value)
Definition: Helper.php:726
$info
Definition: example_052.php:80

References $info, $size, GetId3\Lib\Helper\array_merge_clobber(), GetId3\Lib\Helper\CreateDeepArray(), GetId3\Handler\BaseHandler\feof(), GetId3\Handler\BaseHandler\fread(), and GetId3\Handler\BaseHandler\fseek().

+ Here is the call graph for this function:

◆ display_perms()

GetId3\Module\Archive\Tar::display_perms (   $mode)

Parses the file mode to file permissions.

Parameters
type$mode
Returns
type

Definition at line 147 of file Tar.php.

148 {
149 // Determine Type
150 if ($mode & 0x1000) $type = 'p'; // FIFO pipe
151 elseif ($mode & 0x2000) $type = 'c'; // Character special
152 elseif ($mode & 0x4000) $type = 'd'; // Directory
153 elseif ($mode & 0x6000) $type = 'b'; // Block special
154 elseif ($mode & 0x8000) $type = '-'; // Regular
155 elseif ($mode & 0xA000) $type = 'l'; // Symbolic Link
156 elseif ($mode & 0xC000) $type = 's'; // Socket
157 else $type = 'u'; // UNKNOWN
158
159
160// Determine permissions
161 $owner['read'] = (($mode & 00400) ? 'r' : '-');
162 $owner['write'] = (($mode & 00200) ? 'w' : '-');
163 $owner['execute'] = (($mode & 00100) ? 'x' : '-');
164 $group['read'] = (($mode & 00040) ? 'r' : '-');
165 $group['write'] = (($mode & 00020) ? 'w' : '-');
166 $group['execute'] = (($mode & 00010) ? 'x' : '-');
167 $world['read'] = (($mode & 00004) ? 'r' : '-');
168 $world['write'] = (($mode & 00002) ? 'w' : '-');
169 $world['execute'] = (($mode & 00001) ? 'x' : '-');
170
171 // Adjust for SUID, SGID and sticky bit
172 if ($mode & 0x800)
173 $owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
174 if ($mode & 0x400)
175 $group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
176 if ($mode & 0x200)
177 $world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';
178
179 $s = sprintf('%1s', $type);
180 $s .= sprintf('%1s%1s%1s', $owner['read'], $owner['write'],
181 $owner['execute']);
182 $s .= sprintf('%1s%1s%1s', $group['read'], $group['write'],
183 $group['execute']);
184 $s .= sprintf('%1s%1s%1s' . "\n", $world['read'], $world['write'],
185 $world['execute']);
186
187 return $s;
188 }
sprintf('%.4f', $callTime)

References sprintf.

◆ get_flag_type()

GetId3\Module\Archive\Tar::get_flag_type (   $typflag)

Converts the file type.

@staticvar array $flag_types

Parameters
type$typflag
Returns
type

Definition at line 197 of file Tar.php.

198 {
199 static $flag_types = array(
200 '0' => 'LF_NORMAL',
201 '1' => 'LF_LINK',
202 '2' => 'LF_SYNLINK',
203 '3' => 'LF_CHR',
204 '4' => 'LF_BLK',
205 '5' => 'LF_DIR',
206 '6' => 'LF_FIFO',
207 '7' => 'LF_CONFIG',
208 'D' => 'LF_DUMPDIR',
209 'K' => 'LF_LONGLINK',
210 'L' => 'LF_LONGNAME',
211 'M' => 'LF_MULTIVOL',
212 'N' => 'LF_NAMES',
213 'S' => 'LF_SPARSE',
214 'V' => 'LF_VOLHDR'
215 );
216
217 return (isset($flag_types[$typflag]) ? $flag_types[$typflag] : '');
218 }

The documentation for this class was generated from the following file: