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);
$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);
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!