| 
 | 
PHP ile ZIP Oluşturma Sınıfı - PHP Webmaster bilgi bankası, knowledge base Webmaster Araçları
| AnaSayfa > PHP  > PHP ile ZIP Oluşturma Sınıfı |  | 
 |  | Kategori | : PHP |  | Gönderen | : Admin |  | Tarih | : 2009-02-12 |  | Puan | : 0     | Katılımcı : 0 |  | Okunma | : 4013 |  |   |   |  |   |  
 |    |   <?  
class zipfile   {     
     var $datasec=array(); // array to store compressed data   
     var $ctrl_dir=array(); // central directory      
     var $eof_ctrl_dir="x50x4bx05x06x00x00x00x00"; //end of Central directory record   
     var $old_offset=0;   
 
  function add_dir($name)    {     
     // adds "directory" to archive - do this before putting any files in directory!   
     // $name - name of directory... like this: "path/"   
     // ...then you can add files using add_file with names like "path/file.txt"   
     $name=str_replace("\\\\", "/", $name);   
 
     $fr="x50x4bx03x04";   
     $fr .= "x0ax00";    // ver needed to extract   
     $fr .= "x00x00";    // gen purpose bit flag   
     $fr .= "x00x00";    // compression method   
     $fr .= "x00x00x00x00"; // last mod time and date   
 
     $fr .= pack("V",0); // crc32   
     $fr .= pack("V",0); //compressed filesize   
     $fr .= pack("V",0); //uncompressed filesize   
     $fr .= pack("v", strlen($name) ); //length of pathname   
     $fr .= pack("v", 0 ); //extra field length   
     $fr .= $name;    
     // end of "local file header" segment   
 
     // no "file data" segment for path   
 
     // "data descriptor" segment (optional but necessary if archive is not served as file)   
 
     $fr .= pack("V",$crc); //crc32   
     $fr .= pack("V",$c_len); //compressed filesize   
     $fr .= pack("V",$unc_len); //uncompressed filesize   
 
     // add this entry to array   
     $this -> datasec[]=$fr;   
 
     $new_offset=strlen(implode("", $this->datasec));   
 
     // ext. file attributes mirrors MS-DOS directory attr byte, detailed   
     // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp   
 
     // now add to central record   
     $cdrec="x50x4bx01x02";   
     $cdrec .="x00x00";     // version made by   
     $cdrec .="x0ax00";     // version needed to extract   
     $cdrec .="x00x00";     // gen purpose bit flag   
     $cdrec .="x00x00";     // compression method   
     $cdrec .="x00x00x00x00"; // last mod time & date   
     $cdrec .= pack("V",0); // crc32   
     $cdrec .= pack("V",0); //compressed filesize   
     $cdrec .= pack("V",0); //uncompressed filesize   
     $cdrec .= pack("v", strlen($name) ); //length of filename   
     $cdrec .= pack("v", 0 ); //extra field length       
     $cdrec .= pack("v", 0 ); //file comment length   
     $cdrec .= pack("v", 0 ); //disk number start   
     $cdrec .= pack("v", 0 ); //internal file attributes   
     $ext="x00x00x10x00";   
     $ext="xffxffxffxff";     
     $cdrec .= pack("V", 16 ); //external file attributes  - \\'directory\\' bit set   
 
     $cdrec .= pack("V", $this -> old_offset ); //relative offset of local header   
     $this -> old_offset=$new_offset;   
 
     $cdrec .= $name;     
     // optional extra field, file comment goes here   
     // save to array   
     $this -> ctrl_dir[]=$cdrec;     
  }   
  function add_file($data, $name) {    
      // adds "file" to archive      
      // $data - file contents   
      // $name - name of file in archive. Add path if your want   
     $name=str_replace("", "/", $name);     
     //$name=str_replace("", "", $name);   
     $fr="x50x4bx03x04";   
     $fr .= "x14x00";     // ver needed to extract   
     $fr .= "x00x00";     // gen purpose bit flag   
     $fr .= "x08x00";     // compression method   
     $fr .= "x00x00x00x00"; // last mod time and date   
 
     $unc_len=strlen($data);     
     $crc=crc32($data);     
     $zdata=gzcompress($data);     
     $zdata=substr( substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug   
     $c_len=strlen($zdata);     
     $fr .= pack("V",$crc); // crc32   
     $fr .= pack("V",$c_len); //compressed filesize   
     $fr .= pack("V",$unc_len); //uncompressed filesize   
     $fr .= pack("v", strlen($name) ); //length of filename   
     $fr .= pack("v", 0 ); //extra field length   
     $fr .= $name;     
     // end of "local file header" segment   
                   
     // "file data" segment   
     $fr .= $zdata;     
 
     // "data descriptor" segment (optional but necessary if archive is not served as file)   
     $fr .= pack("V",$crc); //crc32   
     $fr .= pack("V",$c_len); //compressed filesize   
     $fr .= pack("V",$unc_len); //uncompressed filesize   
 
     // add this entry to array   
     $this -> datasec[]=$fr;   
 
     $new_offset=strlen(implode("", $this->datasec));   
 
     // now add to central directory record   
     $cdrec="x50x4bx01x02";   
     $cdrec .="x00x00";     // version made by   
     $cdrec .="x14x00";     // version needed to extract   
     $cdrec .="x00x00";     // gen purpose bit flag   
     $cdrec .="x08x00";     // compression method   
     $cdrec .="x00x00x00x00"; // last mod time & date   
     $cdrec .= pack("V",$crc); // crc32   
     $cdrec .= pack("V",$c_len); //compressed filesize   
     $cdrec .= pack("V",$unc_len); //uncompressed filesize   
     $cdrec .= pack("v", strlen($name) ); //length of filename   
     $cdrec .= pack("v", 0 ); //extra field length       
     $cdrec .= pack("v", 0 ); //file comment length   
     $cdrec .= pack("v", 0 ); //disk number start   
     $cdrec .= pack("v", 0 ); //internal file attributes   
     $cdrec .= pack("V", 32 ); //external file attributes - \\'archive\\' bit set   
 
     $cdrec .= pack("V", $this -> old_offset );   
 
     //relative offset of local header   
     // &n // bsp; echo "old offset is ".$this->old_offset.", new offset is $new_offset<br>";   
     $this -> old_offset=$new_offset;   
 
     $cdrec .= $name;     
     // optional extra field, file comment goes here   
     // save to central directory   
     $this -> ctrl_dir[]=$cdrec;     
  }   
  function file() { // dump out file  
     $data=implode("", $this -> datasec);     
     $ctrldir=implode("", $this -> ctrl_dir);     
     return  
     $data.     
     $ctrldir.     
     $this -> eof_ctrl_dir.     
     pack("v", sizeof($this -> ctrl_dir)).     // total # of entries "on this disk"   
     pack("v", sizeof($this -> ctrl_dir)). // total # of entries overall   
     pack("V", strlen($ctrldir)).          // size of central dir   
     pack("V", strlen($data)).             // offset to start of central dir   
     "x00x00";                             // .zip file comment length   
     }   
}     
   
 
 
// ÖRNEK KULLANIMI   
     $zipfile=new zipfile();     
 
     // Zip Klasörünün İçinde Yeni Bir Klasör Oluşturmak İsterseniz   
     $zipfile -> add_dir("dir/");   
 
     // zip Klasörünün İçindeki Dosya İçeriği   
     $filedata="zip klasörünün içindeki dosyaya yazmak istedikleriniz buraya";     
     $zipfile -> add_file($filedata, "dir/file.txt");     
 
     // Bu Bölüm Zip Klasörünü Download Etmek İçin   
     header("Content-type: application/octet-stream");     
     header("Content-disposition: attachment; filename=test.zip");     
     echo $zipfile -> file();     
 
 
     // Bu Bölüm Zip Klasörünü Sunucunuza Kaydetmek İçin   
     $filename="output.zip";   
     $fd=fopen ($filename, "wb");   
     $out=fwrite ($fd, $zipfile -> file());   
     fclose ($fd);   
?>
 
  |   
| Yorumlar |  | Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin! |  | Yorum Ekleme Aparatı |  Yorum Eklemek için lütfen sol menuden giris yapınız..  |  | Toplam 0 yorum listelendi.  |  
   |