php如何压缩一个文件夹里面所有的文件到zip文件里面?
如我的localhost下有个test文件夹,内部有很多文件和文件夹,如何把test里面所有东西打包成 test.zip?
------解决方案--------------------
php code function readfileheader($zip){ $binary_data = fread($zip, 30); $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/vcrc/vcompressed_size/vsize/vfilename_len/vextra_len', $binary_data); $header['filename'] = fread($zip, $data['filename_len']); if($data['extra_len'] != 0){$header['extra'] = fread($zip, $data['extra_len']);}else{$header['extra'] = '';} $header['compression'] = $data['compression']; $header['size'] = $data['size']; $header['compressed_size'] = $data['compressed_size']; $header['crc'] = $data['crc']; $header['flag'] = $data['flag']; $header['mdate'] = $data['mdate']; $header['mtime'] = $data['mtime']; if($header['mdate'] && $header['mtime']){ $hour = ($header['mtime']&0xf800) >> 11; $minute = ($header['mtime']&0x07e0) >> 5; $seconde = ($header['mtime']&0x001f) * 2; $year = (($header['mdate']&0xfe00) >> 9) + 1980; $month = ($header['mdate']&0x01e0) >> 5; $day = $header['mdate']&0x001f; $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); }else{ $header['mtime'] = time(); } $header['stored_filename'] = $header['filename']; $header['status'] = ok; return $header; } function readcentralfileheaders($zip){ $binary_data = fread($zip, 46); $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/vcrc/vcompressed_size/vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/vexternal/voffset', $binary_data); if($header['filename_len'] != 0) $header['filename'] = fread($zip, $header['filename_len']); else $header['filename'] = ''; if($header['extra_len'] != 0) $header['extra'] = fread($zip, $header['extra_len']); else $header['extra'] = ''; if($header['comment_len'] != 0) $header['comment'] = fread($zip, $header['comment_len']); else $header['comment'] = ''; if($header['mdate'] && $header['mtime']){ $hour = ($header['mtime'] &0xf800) >> 11; $minute = ($header['mtime'] &0x07e0) >> 5; $seconde = ($header['mtime'] &0x001f) * 2; $year = (($header['mdate'] &0xfe00) >> 9) + 1980; $month = ($header['mdate'] &0x01e0) >> 5; $day = $header['mdate'] &0x001f; $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year); }else{ $header['mtime'] = time(); } $header['stored_filename'] = $header['filename']; $header['status'] = 'ok'; if(substr($header['filename'], -1) == '/') $header['external'] = 0x41ff0010; return $header; } function readcentraldir($zip, $zip_name){ $size = filesize($zip_name); if($size readfileheader($zip); if(substr($to, -1) != /) $to .= /; if(!@is_dir($to)) @mkdir($to, 0777); $pth = explode(/, dirname($header['filename'])); for($i = 0;isset($pth[$i]);$i++){ if(!$pth[$i]) continue; $pthss .= $pth[$i] . /; if(!is_dir($to . $pthss)) @mkdir($to . $pthss, 0777); } if(!($header['external'] == 0x41ff0010) && !($header['external'] == 16)){ if($header['compression'] == 0){ $fp = @fopen($to . $header['filename'], 'wb'); if(!$fp) return(-1); $size = $header['compressed_size']; while($size != 0){ $read_size = ($size
