//filename:zip文件的路径
function zip_up($filename)
{
$filename = iconv("utf-8","gb2312",$filename);
$path = './Uploads/flies/miamge/'.time().rand(1,100000).'/';
$path = iconv("utf-8","gb2312",$path);
$resource = zip_open($filename);
$user_id = $_SESSION['ruser']['id'];
while ($dir_resource = zip_read($resource)) {
//如果能打开则继续
if (zip_entry_open($resource,$dir_resource)) {
//获取当前项目的名称,即压缩包里面当前对应的文件名
$file_name = $path.zip_entry_name($dir_resource);
//以最后一个“/”分割,再用字符串截取出路径部分
$file_path = substr($file_name,0,strrpos($file_name, "/"));
//如果路径不存在,则创建一个目录,true表示可以创建多级目录
if(!is_dir($file_path)){
//将名称转码,防止中文名字目录创建失败
mkdir(iconv("utf-8","gb2312",$file_path),0777,true);
}
//如果不是目录,则写入文件,将名称转码,否则中文将无法判断是否为目录
$file_name = iconv("utf-8","gb2312",$file_name);
if(!is_dir($file_name)){
//读取这个文件
$file_size = zip_entry_filesize($dir_resource);
// 读取数据流
$file_content = zip_entry_read($dir_resource,$file_size);
// 数据流写入文件
file_put_contents($file_name,$file_content);
}
//关闭当前
zip_entry_close($dir_resource);
}
}
zip_close($resource);
if(file_exists($filename)){
unlink($filename);
}
}
当压缩包中有多层目录时,会一层一层写入,直到没有下一层;
$file_name是每层目录或文件的相对根目录的全路径名称
当前代码需要安装php_zip扩展
配置:
1、将php_zip.dll放到php的ext目录
2、修改php.ini,加入 extension=php_zip
文章来源于:https://www.php.cn/php-ask-430631.html