批量下載文件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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM