您好,欢迎访问一九零五行业门户网

php压缩文件帮助类

addfile($filevalue, $filename); }else{ $this->dirtree($dir,$dir); } $zipfilenametemp = time().$zipfilename; $out = $this -> filezip(); $fp = fopen($zipfilenametemp, w); fwrite($fp, $out, strlen($out)); fclose($fp); $filesize = filesize($zipfilenametemp); if ($filesize if($autodownload){ header(content-type: application/octet-stream); header(content-disposition: attachment; filename=.$zipfilename); } echo $this -> filezip(); }else{ echo create zip error!; } unlink($zipfilenametemp); } } //get dir tree.. function dirtree($directory,$rootdir){ global $_server,$dirinfo,$rootdir; $filedir=$rootdir; $mydir=dir($directory); while($file=$mydir->read()){ if(is_dir($directory/$file) and $file!=. and $file!=..){ $dirinfo[0]++; $rootdir =$filedir$file/; $this -> addfile('', $rootdir); //go on n's folders $this->dirtree($directory/$file,$rootdir); }else{ if($file!=. and $file!=..){ $dirinfo[1]++; //$fd = fopen ($directory/$file, r); $filevalue = file_get_contents($directory/$file); //fclose ($fd); $this -> addfile($filevalue, $filedir$file); } } } $mydir->close(); } function unix2dostime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) ($timearray['hours'] > 1); } 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 = /x50/x4b/x03/x04; $fr .= /x14/x00; // ver needed to extract $fr .= /x00/x00; // gen purpose bit flag $fr .= /x08/x00; // 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 = /x50/x4b/x01/x02; $cdrec .= /x00/x00; // version made by $cdrec .= /x14/x00; // version needed to extract $cdrec .= /x00/x00; // gen purpose bit flag $cdrec .= /x08/x00; // 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; } function filezip(){ $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 /x00/x00; // .zip file comment length } } ?> 还有另外一个比较简单的 [php] view plaincopy open($destination,$overwrite ? ziparchive::overwrite : ziparchive::create) !== true) { return false; } //向压缩文件中添加文件 foreach($valid_files as $file) { $zip->addfile($file,$file); } //关闭文件 $zip->close(); //检测文件是否存在 return file_exists($destination); } else{ //如果没有真实有效的文件返回false return false; } } } /**** //测试函数 $files=array('temp.php','test.php'); create_zip($files, 'myzipfile.zip', true); ****/ ?>
复制代码
压缩文件, php
其它类似信息

推荐信息