Hallo,
ich bin im moment dabei, eine Klasse zum entpacken von tar.gz Archiven zu erstellen. Seltsamerweise "verschiebt" sich scheinbar der Header, da nach ein paar Files die Checksumme nicht mehr stimmt und die Dateinamen verschoben werden. Fehler werden keine Ausgegeben (error_reporting auf E_ALL) und das Archiv funktioniert auch (entpackt mit WinRar, alles okay). Hier mal ein Code-Ausschnitt:
Hoffe mir kann geholfen werden...
gruß matze
ich bin im moment dabei, eine Klasse zum entpacken von tar.gz Archiven zu erstellen. Seltsamerweise "verschiebt" sich scheinbar der Header, da nach ein paar Files die Checksumme nicht mehr stimmt und die Dateinamen verschoben werden. Fehler werden keine Ausgegeben (error_reporting auf E_ALL) und das Archiv funktioniert auch (entpackt mit WinRar, alles okay). Hier mal ein Code-Ausschnitt:
PHP-Code:
public function getContent() {
while($read=fread($this->handler,512)) {
if(strlen($read)!=512) {
die('Failure');
}
$check='';
//Cheksumme berechnen
for($i=0;$i<148;$i++) {
$check+=ord(substr($read,$i,1));
}
for($i=148;$i<156;$i++) {
$check+=ord(' ');
}
for ($i=156;$i<512;$i++) {
$check+=ord(substr($read,$i,1));
}
$data=unpack("a100filename/a8mode/a8uid/a8gid/
a12size/a12mtime/a8checksum/a1type/a100link/a6magic/
a2version/a32uname/a32gname/a8devmajor/a8devminor",$read);
$file=array('name'=>$data['filename'],
'stat'=>array (
2=>$data['mode'],
4=>octdec($data['uid']),
5=>octdec($data['gid']),
7=>octdec($data['size']),
9=>octdec($data['mtime']),
),
'checksum'=>octdec($data['checksum']),
'type'=>$data['type'],
'magic'=>$data['magic'],
'link'=>$data['link']);
/*if($file['checksum']==0x00000000) {
echo 'Checksum error #1';
break;
}*/
echo $check.' '.$file['checksum'].'<br />';
if($file['checksum']!=$check) {
echo 'Checksum error #2<br />';
break;
}
$this->content[]=$file;
unset($file,$data,$check);
}
return $this->content;
}
gruß matze
Kommentar