Exemples de deux méthodes pour empaqueter et télécharger plusieurs fichiers en PHP

零下一度
Libérer: 2023-03-14 08:08:01
original
3022 Les gens l'ont consulté

J'ai récemment trié les documents et trouvé un exemple de code pour l'empaquetage et le téléchargement de plusieurs fichiers php. Je l'ai un peu trié et rationalisé pour partager la compression et le téléchargement de plusieurs fichiers php.

Lorsque vous devez télécharger plusieurs fichiers en même temps, la plupart des navigateurs ne prennent pas en charge le téléchargement de plusieurs fichiers en même temps. Vous pouvez utiliser le script JavaScript pour générer dynamiquement plusieurs liens. , mais cela nécessite que l'utilisateur clique plusieurs fois sur la boîte de dialogue de téléchargement, l'expérience utilisateur n'est pas bonne et certains navigateurs ne sont pas compatibles. À l’heure actuelle, plusieurs téléchargements de packages de fichiers peuvent vous aider à résoudre ce problème.

/*compression et téléchargement multi-fichiers php*/

function addFileToZip($path,$zip){
        $handler=opendir($path); //打开当前文件夹由$path指定。
        while(($filename=readdir($handler))!==false){
            if($filename != "." && $filename != ".."){//文件夹文件名字为'.'和‘..’,不要对他们进行操作
                if(is_dir($path."/".$filename)){// 如果读取的某个对象是文件夹,则递归
                    addFileToZip($path."/".$filename, $zip);
                }else{
                    //将文件加入zip对象;并减少目录层
                    $zip->addFile($path.$filename, $filename);
                }
            }
        }
        @closedir($path);
    }
     
    //要下载的文件夹路径
    $filePath = '..'.$_GET['activepath']. '/'. $_GET['filename'].'/';
    //生成压缩文件名字
    $zipFileName = '../download/'.$_GET['filename'] .'.zip';
 
    $zip=new ZipArchive();
    if($zip->open($zipFileName, ZipArchive::OVERWRITE)=== TRUE){
        addFileToZip($filePath, $zip); //调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法
        $zip->close(); //关闭处理的zip文件
    }
     
    if(!file_exists($zipFileName))
    {
        echo '文件压缩失败!或者未生成压缩包!!';
        exit;
    }
     
    header("Cache-Control: public");
    header("Content-Description: File Transfer");
    header('Content-disposition: attachment; filename='.basename($zipFileName)); //文件名
    header("Content-Type: application/zip"); //zip格式的
    header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
    header('Content-Length: '. filesize($zipFileName)); //告诉浏览器,文件大小
    @readfile($zipFileName);
Copier après la connexion
$filename = "test.zip";
$datalist=array('./pubfile/1.jpg','./pubfile/2.jpg');
if(!file_exists($filename)){
 $zip = new ZipArchive();
 if ($zip->open($filename, ZipArchive::CREATE)==TRUE) {
  foreach( $datalist as $val){
   if(file_exists($val)){
    $zip->addFile( $val, basename($val));
   }
  }
  $zip->close();
 }
}
if(!file_exists($filename)){
 exit("无法找到文件");
}
header("Cache-Control: public");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.basename($filename)); //文件名
header("Content-Type: application/zip"); //zip格式的
header("Content-Transfer-Encoding: binary"); //告诉浏览器,这是二进制文件
header('Content-Length: '. filesize($filename)); //告诉浏览器,文件大小
@readfile($filename);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal