ThinkPHP5.1 多图片,多文件打压缩包

ThinkPHP5.1 多图片,多文件打压缩包

情景:前端下载一个以上图片,采用下载压缩包方法
使用PHP自带的ZipArchive类
开启压缩类的方法
这里我将方法大概描述一下避免链接失效

Windows环境:

首先需要从官网上下载,下载地址 https://windows.php.net/downloads/pecl/releases/zip/

打开官网列表后需要查找适合自己的PHP版本和系统的zip,我的PHP版本是5.5的,这里我选择的版本号是1.13.5

image.png
下载完后解压,把里面的php_zip.dll文件放到PHP的扩展文件夹里

image.png
扩展文件夹路径一般都是在PHP版本文件夹里的ext文件夹,譬如我的就是D:\php-5.5.38\ext

把php_zip.dll文件放进去后,打开PHP的配置文件php.ini,添加extension=php_zip.dll,保存后,重启apache服务器
Linux环境:
1、在Linux下没有php_zip.dll这个文件(有也不会起作用的),所以需要重新编译一下php的zip模块。具体安装方法如下:

cd /usr/src

wget http://pecl.php.net/get/zip

tar -zxvf zip

cd zip-1.x.x

phpize

./configure

make

sudo make instal

其中, 在最后使用make install命令的时候,可能需要用到root的权限,所以建议使用sudo来运行。安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/lib/php/extensions/zip.so。

2、使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):

增加extension = /usr/local/lib/php/extensions/zip.so,然后同样在php.ini文件中,将 zlib.output_compression = Off 改为 zlib.output_compression = On ;

3、最后别忘了重启一下Apache:apachectl restart;

这个针对php的zip模块就安装完成了,能够在php中使用ZipArchive类了。

ps:查看php.ini文件位置的方法是:

<?php phpinfo(); ?>

PHP代码

//打压缩文件

//这里$file= ['/public/uploads/20200711/16-39-51-7o0d9i-1527.png', '/public/uploads/20200711/16-39-50-n1kln2-1527.png'];
==注意==图片路径必须是本机文件路径,网络路径会报错
//$id=唯一标识
    public function zip($files,$id) {
    ==注意==压缩包路径必须是本机文件路径,网络路径会报错
        $upload_zip_dir = config('save_path') . date(config('uploaddir'), time()) . '/';//存放在当前目录的upload文件夹下
        is_dir($upload_zip_dir) or @mkdir($upload_zip_dir, 0777, true);
        $zipName = $upload_zip_dir . $id .'.zip';
        $zip     = new \ZipArchive;//使用本类,linux需开启zlib,windows需取消php_zip.dll前的注释
        if ($zip->open($zipName, \ZIPARCHIVE::OVERWRITE | \ZIPARCHIVE::CREATE) !== TRUE) {
            exit('无法打开文件,或者文件创建失败');
        }
        foreach ($files as $val) {
            if (file_exists($val)) {
                $zip->addFile($val, basename($val));//第二个参数是放在压缩包中的文件名称,如果文件可能会有重复,就需要注意一下
            }
        }
        $zip->close();//关闭
        if (!file_exists($zipName)) {
            exit("无法找到文件"); //即使创建,仍有可能失败
        }
        return $zipName;
        //如果不要下载,下面这段删掉即可,如需返回压缩包下载链接,只需 return $zipName;
//        header("Cache-Control: public");
//        header("Content-Description: File Transfer");
//        header('Content-disposition: attachment; filename=' . basename($zipName)); //文件名
//        header("Content-Type: application/zip"); //zip格式的
//        header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
//        header('Content-Length: ' . filesize($zipName)); //告诉浏览器,文件大小
//        @readfile($zipName);
    }

以上完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值