解压代码

create_dirs($dest_dir); 
// zip包中的 每个 文件 
while ($zip_entry = zip_read($zip)) {
 // 现在我们要在目标目录中创建目录 
// 如果文件不在根目录中 
$pos_last_slash = strrpos(zip_entry_name($zip_entry), "/"); 
// strrpos()字符串在另一字符串中最后一次出现的位置。
 if ($pos_last_slash !== false) { 
// 创建保存zip条目的目录(结尾加“/”)substr()可在字符串中抽取从 start 下标开始的指定数目的字符。 
$this->create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1)); } 
// Open the entry
 if (zip_entry_open($zip,$zip_entry,"r")) { 
// 要保存在磁盘上的文件名 
$file_name = $dest_dir.zip_entry_name($zip_entry); 
// 检查是否应覆盖文件
 if ($overwrite === true || $overwrite === false && !is_file($file_name)) { 
// 获取zip条目的内容 
$fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
 file_put_contents($file_name, $fstream ); 
// Set the rights 
chmod($file_name, 0777); 
echo "save: ".$file_name.""; 
} 
// Close the entry 
zip_entry_close($zip_entry);
 }
 } 
// Close the zip-file 
zip_close($zip);
 }
 }else{ 
return false; 
}
 return true;
 } 
/** * This function creates recursive directories if it doesn't already exist * * @param String The path that should be created * * @return void */ 
public function create_dirs($path) {
 if (!is_dir($path)) { 
$directory_path = ""; 
$directories = explode("/",$path); 
array_pop($directories); 
foreach($directories as $directory)
 { $directory_path .= $directory."/"; 
if (!is_dir($directory_path)) { 
mkdir($directory_path); 
chmod($directory_path, 0777);
 } 
}
 } 
} 
} 

使用实例
Extract C:/zipfiletest/zip-file.zip to C:/zipfiletest/zip-file/ and overwrites existing files 
unzip("C:/zipfiletest/zip-file.zip", false, true, true); 
Extract C:/zipfiletest/zip-file.zip to C:/another_map/zipfiletest/ and doesn't overwrite existing files. 
NOTE: It doesn't create a map with the zip-file-name! 
unzip("C:/zipfiletest/zip-file.zip", "C:/another_map/zipfiletest/", true, false);