1. 程式人生 > >php打包文件為ZIP包後下載到本地

php打包文件為ZIP包後下載到本地

tac reat 錯誤 == product filesize 再次 告訴 細節

這是一個工作中需要打包下載當前產品的所有圖片到本地,文件格式為ZIP壓縮包,打包下載文件跟圖片一樣,本程序細節為實際情況,使用需按照自己實際情況書寫:

<?php
/*********************************************程序說明********************************************
*程序功能:產品圖片打包下載,zip壓縮包格式
************************************************************************************************/
header("Content-type:text/html;charset=utf-8");
if(!isset($_GET[‘pro_code‘])){
exit(‘錯誤,您訪問的網頁不存在!‘);
}
$pro_code = $_GET[‘pro_code‘];
//獲取列表
$dir = $_SERVER[‘DOCUMENT_ROOT‘].‘/imgs/ft/‘.substr($pro_code,0,1).‘/‘.substr($pro_code,1,1).‘/‘;
$filelist = getImgList($dir);

$filepath = $_SERVER[‘DOCUMENT_ROOT‘].‘/tmp/product_img/‘;
if(!is_dir($filepath)){
mkdir($filepath);
}
//文件名稱及路徑
$filename = $filepath.$pro_code.‘.zip‘;
$filename = iconv("utf-8","gb2312",$filename);//解決中文不能顯示問題

if(!file_exists($filename)){
//使用ZipArchive類重新生成文件
$zip = new ZipArchive();
if($zip->open($filename,ZIPARCHIVE::CREATE) !== TRUE){
exit(‘無法打開文件,或者文件創建失敗!‘);
}
foreach($filelist as $file){
if(file_exists($file) && isCurrentImg($file, $pro_code)){
$zip->addFile($file, basename($file));
}
}
$zip->close();
}

//創建後需再次判斷文件是否存在
if(!file_exists($filename)){
exit(‘沒有找到文件!‘);
}

//下面是輸出下載;
header("Cache-Control:max-age=0");
header("Content-Description:FileTransfer");
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);//輸出文件;



//檢驗是否為當前產品圖片函數
function isCurrentImg($filepath, $pro_code){
$file = substr($filepath, strrpos($filepath, ‘/‘)+1,strrpos($filepath, ‘-‘)-strrpos($filepath, ‘/‘)-1);
if($file == $pro_code){
return true;
}else{
return false;
}
}

//獲取圖片文件列表函數
function getImgList($dir){
$files = array();
if(is_dir($dir)){
$file_dir = scandir($dir);
foreach($file_dir as $file){
if($file == ‘.‘ || $file == ‘..‘){
continue;
}elseif(is_dir($dir.$file.‘/‘)){
$files = array_merge($files, getImgList($dir.$file.‘/‘));
}else{
array_push($files, $dir.$file);
}
}
}
return $files;
}

php打包文件為ZIP包後下載到本地