• 批量下载文件php


    做了个照片墙,要提供批量下载照片的功能,如果你会文件下载,那批量也是小菜一碟,就是把文件打包压缩为  zip 文件再下载,而php的内置类ZipArchive()让你很容易实现。

    首先,配置php.ini,找到zip模块,启用即可。

    download.php


    <?php 
        $idlist = $_POST['photo_id'];             
    //生成压缩文件
        $filename= rand(100, 999).'.zip'; //最终生成的文件名
        $zip=new ZipArchive();
        if($zip->open($filename,ZIPARCHIVE::CREATE)!==TRUE){
            exit('无法打开文件,或者文件创建失败');
        }
        foreach($idlist as $val){
            if(file_exists($val.'.jpg')){
                $zip->addFile($val.'.jpg');
            }
        }
        $zip->close();//关闭
        if(!file_exists($filename)){
            exit('无法找到文件');           //即使创建,仍有可能失败
        }    
        $dir = '/test/';
        require '../ok.php';
        download($filename);
        unlink($filename,$dir);                     //删除压缩文件
    ?>


    ok.php
    <?php
    //download 参数
    // 1.文件名
    // 2.所在根目录下的路径,形式   /xxx/xxx/
    function download($file_name,$dir){
        $file_name = iconv("UTF-8","gb2312",$file_name);               //如果文件名包含中文,必须先转为GB2312编码
            $file_name = $_SERVER['DOCUMENT_ROOT'].$dir.$file_name;        //绝对路径
        $file_name = $dir.$file_name;
        if(!file_exists($file_name)){ //检查文件是否存在
            echo "文件不存在".$file_name;
            return ;
        }
        $file_size = filesize($file_name);
        $fp=fopen($file_name,'r'); //打开文件
        //输入文件标签
        header("Content-type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Accept-Length: ".$file_size);
        header("Content-Disposition: attachment; filename=".$file_name);
        $buffer = 1024;
        $file_count = 0;
        while (!feof($fp) && $file_size - $file_count > 0){
            $file_data =  fread($fp,$buffer);
            $file_count+=$buffer;
            echo $file_data;
        }
        fclose($fp);
    }
    ?>

    在此分享一款更为方便的下载控件,详细信息可以参考我写的这篇文章:http://blog.ncmem.com/wordpress/2019/08/28/net%e6%96%87%e4%bb%b6%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/

  • 相关阅读:
    隐藏导航练习
    分层导航
    做一个问题,如果输入的答案正确则弹出正确,错误弹出错误
    同意按钮,倒计时10秒
    golang strings
    seek指针大文件上传
    go文件操作大全
    zipimport.ZipImportError: can't decompress data; zlib not available 解决办法
    centos 安装redis自启动要点
    golang 文件读取
  • 原文地址:https://www.cnblogs.com/songsu/p/11458745.html
Copyright © 2020-2023  润新知