解压代码
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);