如何使用php完成文件压缩并下载?

//压缩代码zip.php

<?php
/**
 * Created by PhpStorm.
 * User: 37997
 * Date: 2018/5/8
 * Time: 19:31
 */

//$path = isset($_GET['path']) ? $_GET['path'] : '';
//这个路径就是存储所有需要压缩的文件的路径,按照自己的实际情况修改
$path = "data/";
echo $path;

if($path=='')
{
    echo "path doesn't exist...";
    exit();
}

$handler = opendir($path);
/*其中$filename = readdir($handler)
每次循环时将读取的文件名赋值给$filename,$filename !== false。
一定要用!==,因为如果某个文件名如果叫'0′,或某些被系统认为是代表false,用!=就会停止循环
*/
$files = array();
while( ($filename = readdir($handler)) !== false )
{
    //略过linux目录的名字为'.'和‘..'的文件
    if($filename != "." && $filename != "..")
    {
        //输出文件名
        array_push($files,$path.$filename);
        //echo $filename;
    }
}

print_r($files);

//这里的文件名就是最终压缩后的压缩文件名,需要注意该目录是否存在,并且有创建的权限
$zipname = 'data/all.zip';
$zip = new ZipArchive();
print_r($zip);
$res = $zip->open($zipname, ZipArchive::CREATE);
if ($res === TRUE) {
    foreach ($files as $file) {
        //这里直接用原文件的名字进行打包,也可以直接命名,需要注意如果文件名字一样会导致后面文件覆盖前面的文件,所以建议重新命名
        $new_filename = substr($file, strrpos($file, '/') + 1);
        print_r($new_filename."\n");
        //这里就是将所有文件一个一个取出来并压缩进去
        $zip->addFile($file, $new_filename);
    }
}
$zip->close();

下载压缩文件的代码请参考我的上一篇博客
《如何使用canvas JS库完成html转图片(高清图),并完成下载?(js+php)》

ps :一定要注意路径权限的问题,以我看来,直接chmod 777 $dirName 就好了

猜你喜欢

转载自blog.csdn.net/u010212101/article/details/80383446