zoukankan      html  css  js  c++  java
  • php批量下载文件

    header使用后会终止HTTP请求,所以不能使用header批量下载文件,这里使用打包的方法,这个过程中将使用到 ZipArchive 这个类,需要linux安装zlib扩展,windows需取消php_zip.dll前的注释

    $pic_path = 'http://www.baidu.com';
    $qrList = array(
        array(
            'data'=>array(
                'id'=>1,
                'source'=>'qrCodeSale1'
            ),
        ),
        array(
            'data'=>array(
                'id'=>2,
                'source'=>'qrCodeSale2'
            ),
        ),
        array(
            'data'=>array(
                'id'=>3,
                'source'=>'qrCodeSale3'
            ),
        ),
    );
    $filename = '/tmp/batchQrCodeDownload.zip';
    $zip = new ZipArchive();
    $zip->open($filename, ZipArchive::OVERWRITE);
    $zip->addEmptyDir('images'); //增加一个目录的原因是,如果zip包没东西会一直下载,永不停止
    foreach ($qrList as $value) {
        $fileData = file_get_contents($pic_path . '/' . $value['data']['source'] . '/' . $value['data']['source'] . '_' . $value['data']['id'] . '.jpg');
        if ($fileData) {
            $zip->addFromString('images/' . $value['data']['source'] . '.jpg', $fileData);
        }
    }
    $zip->close();
    //打开文件
    $file = fopen($filename, "r");
    //返回的文件类型
    Header("Content-type: application/octet-stream");
    //按照字节大小返回
    Header("Accept-Ranges: bytes");
    //返回文件的大小
    Header("Accept-Length: " . filesize($filename));
    //这里对客户端的弹出对话框,对应的文件名
    Header("Content-Disposition: attachment; filename=batchQrCodeDownload.zip");
    //一次只传输1024个字节的数据给客户端
    //向客户端回送数据
    $buffer = 1024; //
    //判断文件是否读完
    while (!feof($file)) {
        //将文件读入内存
        $file_data = fread($file, $buffer);
        //每次向客户端回送1024个字节的数据
        echo $file_data;
    }
    
    fclose($file);
    
    unlink($filename); //删除文件
    

    注意:zip文件可以放在tmp文件下,这个文件夹有777权限

    1

    如果使用addFile指定的文件必须在当前目录或者当前子目录下,如果使用远程文件可以通过addFromString方法

    2

    zip包中不能为空,所以为了避免文件获取不到,可以添加一个目录

    3

    不要使用远程文件,会导致文件一直写,永不停止

     

  • 相关阅读:
    安卓iOS软件免编程开发步骤
    我的站被收录了两次,被封掉两次,怎么办?
    百度算法调整 优化网站该从哪几方面着手?
    如何成为php编程高手
    百度等搜索引擎寻找各种数据库网站的方法
    【网站抓取】如何正确识别Baiduspider移动ua
    EditPlus 技巧大全:[1]怎么配置PHP编译环境
    如何本地搭建php环境用来测试PHP程序教程!
    用最简洁的代码构建MVC分层
    BMR计算器2——python第三课(字符串分割,格式化输出,异常处理)
  • 原文地址:https://www.cnblogs.com/quinnxu/p/3544990.html
Copyright © 2011-2022 走看看