请高手指点:PHP 如何解压缩zip格式压缩的文件或压缩文件夹内的文件到指定目录
zip格式压缩了几个文件,或压缩了一个文件夹,文件夹里有多个文件,现在要把压缩包内的文件解压到指定目录,无论压缩包内有无文件夹,都只要文件,不要文件夹,该怎么做,求高手指...
zip格式压缩了几个文件,或压缩了一个文件夹,文件夹里有多个文件,
现在要把压缩包内的文件解压到指定目录,无论压缩包内有无文件夹,都只要文件,不要文件夹,该怎么做,求高手指点。
比如:C:\aaa.zip 解压到 C:\bbb
aaa.zip 可能只包含 abc.txt,或包含文件夹 ccc\abc.txt,只需要把abc.txt解压到C:\bbb
我现在的做法,只能解压文件,如果压缩包里有文件夹就不能正确解压了。
$file //zip文件
$fileDir //要解压到文件路径(绝对路径)
function unzip ($file,$fileDir) {
$zip = zip_open($file);
echo $zip;
echo "**";
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$name = zip_entry_name($zip_entry);
if (zip_entry_open($zip, $zip_entry, "r ")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$newName=microtime().zip_entry_name($zip_entry);
$fileHandle=fopen( "$fileDir/$newName ", 'w+ ');
fwrite($fileHandle,$buf,zip_entry_filesize($zip_entry));
fclose($fileHandle);
zip_entry_close($zip_entry);
}else{
return false;
}
}
return zip_close($zip);
}
} 展开
现在要把压缩包内的文件解压到指定目录,无论压缩包内有无文件夹,都只要文件,不要文件夹,该怎么做,求高手指点。
比如:C:\aaa.zip 解压到 C:\bbb
aaa.zip 可能只包含 abc.txt,或包含文件夹 ccc\abc.txt,只需要把abc.txt解压到C:\bbb
我现在的做法,只能解压文件,如果压缩包里有文件夹就不能正确解压了。
$file //zip文件
$fileDir //要解压到文件路径(绝对路径)
function unzip ($file,$fileDir) {
$zip = zip_open($file);
echo $zip;
echo "**";
if ($zip) {
while ($zip_entry = zip_read($zip)) {
$name = zip_entry_name($zip_entry);
if (zip_entry_open($zip, $zip_entry, "r ")) {
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$newName=microtime().zip_entry_name($zip_entry);
$fileHandle=fopen( "$fileDir/$newName ", 'w+ ');
fwrite($fileHandle,$buf,zip_entry_filesize($zip_entry));
fclose($fileHandle);
zip_entry_close($zip_entry);
}else{
return false;
}
}
return zip_close($zip);
}
} 展开
1个回答
展开全部
/**
* PHP在线压缩/解压实例
*/
date_default_timezone_set('prc');
$zip = new engine_compress_decompress();
if (isset($_POST))
{
$sourcePath = ''; //默认位置
if (isset($_FILES['upfile'])) //上传文件
{
$stmp = $zip->fileUpload('upfile');
$sourcePath = $stmp['sourcefile'];
$upfileError = $stmp['error'];
}
elseif (isset($_POST['inputfile'])) //输入目录或者文件
{
$sourcePath = $_POST['inputfile'];
}
elseif (isset($_POST['decompresssourcefiles'])) //解压缩提交
{
$isDecompress = $zip->decompress($_POST['decompresssourcefiles'], $_POST['topath']);
if (!empty($isDecompress['filelist']))
{
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#decompress\'</script>';
}
}
$fileList = $zip->fileArray($sourcePath); //解压缩文件列表
if (isset($_POST['compressinputfileorfolder'])) //压缩文件目录或者文件输入
{
$sourcePath = $_POST['compressinputfileorfolder'];
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#compress\'</script>';
$compressFilelist = $zip->compressFileArray($sourcePath); //压缩文件列表
}
elseif ((isset($_POST['selectcompressfilelist'])) && (isset($_POST['compresssavefilename'])))
{
$compressFiles = $zip->compress($_POST['selectcompressfilelist'], $_POST['compresssavefilename']); //真实检测
$isCompress = $zip->CompileZipFile($compressFiles, $zip->savePath, 'all');
if (!empty($isCompress))
{
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#compress\'</script>';
}
}
}
* PHP在线压缩/解压实例
*/
date_default_timezone_set('prc');
$zip = new engine_compress_decompress();
if (isset($_POST))
{
$sourcePath = ''; //默认位置
if (isset($_FILES['upfile'])) //上传文件
{
$stmp = $zip->fileUpload('upfile');
$sourcePath = $stmp['sourcefile'];
$upfileError = $stmp['error'];
}
elseif (isset($_POST['inputfile'])) //输入目录或者文件
{
$sourcePath = $_POST['inputfile'];
}
elseif (isset($_POST['decompresssourcefiles'])) //解压缩提交
{
$isDecompress = $zip->decompress($_POST['decompresssourcefiles'], $_POST['topath']);
if (!empty($isDecompress['filelist']))
{
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#decompress\'</script>';
}
}
$fileList = $zip->fileArray($sourcePath); //解压缩文件列表
if (isset($_POST['compressinputfileorfolder'])) //压缩文件目录或者文件输入
{
$sourcePath = $_POST['compressinputfileorfolder'];
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#compress\'</script>';
$compressFilelist = $zip->compressFileArray($sourcePath); //压缩文件列表
}
elseif ((isset($_POST['selectcompressfilelist'])) && (isset($_POST['compresssavefilename'])))
{
$compressFiles = $zip->compress($_POST['selectcompressfilelist'], $_POST['compresssavefilename']); //真实检测
$isCompress = $zip->CompileZipFile($compressFiles, $zip->savePath, 'all');
if (!empty($isCompress))
{
$href = '<script type="text/javascript" language="javascript">window.location.href=\'#compress\'</script>';
}
}
}
追问
谢谢你的回答,有些地方没明白
1、engine_compress_decompress 是什么类型?我没找到
2、有几个类似'decompresssourcefiles' 或'compressinputfileorfolder'的字符串,都是画面项目名吗?作用是什么?
呵呵,第一次做,不了解到东西太多了
追答
engine_compress_decompress 是自定义的压缩与解压缩类
compressinputfileorfolder是输入压缩文件或目录
decompresssourcefiles是解压文件或目录
代码太多,输入不了那么多内容,我把前面定义的内容省略了,上面告诉你的是重点,类和压缩解压你可以自己另外定义
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询