PHPZip class usage example for PHP file compression, _ PHP Tutorial

Source: Internet
Author: User
PHPZip class usage example for PHP file compression ,. PHPZip class usage example for PHP file compression. This article describes the PHPZip class usage for PHP file compression. Share it with you for your reference. The details are as follows: phpphpz00001.2bysext (example of PHP zip class usage for se php file compression,

This document describes how to use the PHP zip class for PHP file compression. Share it with you for your reference. The details are as follows:

<?php//// PHPZip v1.2 by Sext (sext@neud.net) //// Makes zip archive//// Based on "Zip file creation class", uses zLib////class PHPZip{function Zip($dir, $zipfilename){    if (@function_exists('gzcompress'))    {     $curdir = getcwd();     if (is_array($dir))     {          $filelist = $dir;     }     else     {      $filelist = $this -> GetFileList($dir);     }     if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);     else chdir($curdir);     if (count($filelist)>0)     {      foreach($filelist as $filename)      {          if (is_file($filename))          {           $fd = fopen ($filename, "r");           $content = fread ($fd, filesize ($filename));           fclose ($fd);           if (is_array($dir)) $filename = basename($filename);           $this -> addFile($content, $filename);          }      }      $out = $this -> file();      chdir($curdir);      $fp = fopen($zipfilename, "w");      fwrite($fp, $out, strlen($out));      fclose($fp);     }     return 1;    }    else return 0;}function GetFileList($dir){    if (file_exists($dir))    {     $args = func_get_args();     $pref = $args[1];     $dh = opendir($dir);     while($files = readdir($dh))     {      if (($files!=".")&&($files!=".."))      {          if (is_dir($dir.$files))          {           $curdir = getcwd();           chdir($dir.$files);           $file = array_merge($file, $this -> GetFileList("", "$pref$files/"));           chdir($curdir);          }          else $file[]=$pref.$files;      }     }     closedir($dh);    }    return $file;}var $datasec  = array();var $ctrl_dir   = array();var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";var $old_offset = 0;/**  * Converts an Unix timestamp to a four byte DOS date and time format (date  * in high two bytes, time in low two bytes allowing magnitude comparison).  *  * @param  integer  the current Unix timestamp  *  * @return integer  the current date in a four byte DOS format  *  * @access private  */function unix2DosTime($unixtime = 0) {    $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);    if ($timearray['year'] < 1980) {     $timearray['year'] = 1980;     $timearray['mon']   = 1;     $timearray['mday'] = 1;     $timearray['hours'] = 0;     $timearray['minutes'] = 0;     $timearray['seconds'] = 0;    } // end if    return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |      ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);} // end of the 'unix2DosTime()' method/**  * Adds "file" to archive  *  * @param  string file contents  * @param  string name of the file in the archive (may contains the path)  * @param  integer  the current timestamp  *  * @access public  */function addFile($data, $name, $time = 0){    $name   = str_replace('', '/', $name);     $dtime = dechex($this->unix2DosTime($time));    $hexdtime = 'x' . $dtime[6] . $dtime[7]        . 'x' . $dtime[4] . $dtime[5]        . 'x' . $dtime[2] . $dtime[3]        . 'x' . $dtime[0] . $dtime[1];    eval('$hexdtime = "' . $hexdtime . '";');    $fr = "x50x4bx03x04";    $fr .= "x14x00";     // ver needed to extract    $fr .= "x00x00";     // gen purpose bit flag    $fr .= "x08x00";     // compression method    $fr .= $hexdtime;     // last mod time and date     // "local file header" segment    $unc_len = strlen($data);    $crc   = crc32($data);    $zdata = gzcompress($data);    $c_len = strlen($zdata);    $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug    $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;    // "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 .= $hexdtime;         // 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    $this -> old_offset = $new_offset;    $cdrec .= $name;    // optional extra field, file comment goes here    // save to central directory    $this -> ctrl_dir[] = $cdrec;} // end of the 'addFile()' method/**  * Dumps out file  *  * @return  string  the zipped file  *  * @access public  */function 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} // end of the 'file()' method} // end of the 'PHPZip' class?>

Usage:

<? Php $ z = new PHPZip (); // Create a zip class // Method 1: $ z-> Zip ("", "out1.zip "); // add all files in the current directory and subdirectory // Method 2: Using files+array('1.txt','gb.txt'using multiple files+++'5.txt '; $ z-> Zip ($ files, "out2.zip "); // add a file list // method 3: $ z-> Zip ("/usr/local/sext/", "out3.zip"); // add a specified directory?>

I hope this article will help you with php programming.

Example: PHPZip class usage for PHP file compression. Share it with you for your reference. Php // PHPZip v1.2 by Sext (se...

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.