• 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); //删除文件

  • 相关阅读:
    入门学习嵌入式260期手把手配套视频7个项目实战送书
    使用from 的setTimeOut方法实现定时关闭Form
    C#面试题
    《JS语法字典》网友总结
    简单SQL语句小结
    面试前的简历
    Hello World的17种写法(C#)(转贴)
    张芸京 偏爱
    关于我对.setTmp()的理解及应用
    VS 2005使用技巧
  • 原文地址:https://www.cnblogs.com/chenkg/p/3758291.html
Copyright © 2020-2023  润新知