tar.gz Archiv entpacken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • tar.gz Archiv entpacken

    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:

    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;
        } 
    Hoffe mir kann geholfen werden...
    gruß matze

  • #2
    sind die checksummen auch nur verschoben (wie die namen) oder komplette ungültig?

    Kommentar


    • #3
      Die Checksummen sind bei meinem Testarchiv anfangs korrekt, dann jedoch 0. Beim debuggen ist mir gerade aufgefallen, dass die Dateien als solche alle korrekt sind, daraus schließe ich, dass zwischen den Dateinamen der Inhalt der Datei steht.

      Kommentar


      • #4
        Hab es nun hinbekommen
        Allerdings bräuchte ich noch ein vernünftiges Packprogramm, das tar.gz Dateien erstellt. Für Windiows. Hat gerade einer eins zur Hand?

        Kommentar


        • #5
          http://www.cygwin.com/
          Wir werden alle sterben

          Kommentar

          Lädt...
          X