thinkphp 打包下載img圖片

//圖片根據(jù)聯(lián)機打包下載

? ? public function? zip(){

//引用打包插件,因為不能上傳文件,可考下面代碼保存

vendor('zipfile.zipfile');

//下面是實例操作過程:

? ? ? ? $dfile= tempnam('/tmp','tmp');//產(chǎn)生一個臨時文件,用于緩存下載文件

? ? ? ? $zip= new \zipfile();

//----------------------

? ? ? ? $filename= 'image.zip';//下載的默認文件名

//以下是需要下載的圖片數(shù)組信息,將需要下載的圖片信息轉(zhuǎn)化為類似即可

? ? ? ? $image= array(

array('image_src' => 'http://project.xxq/upload/image/20190906/1567758112602270.jpg','image_name' => '1567758112602270.jpg'),

array('image_src' => 'http://project.xxq/upload/image/20190906/1567758220245707.jpg','image_name' => '1567758220245707.jpg'),

);

foreach($imageas $v){

$zip->add_file(file_get_contents($v['image_src']), $v['image_name']);

// 添加打包的圖片,第一個參數(shù)是圖片內(nèi)容暖侨,第二個參數(shù)是壓縮包里面的顯示的名稱, 可包含路徑

? ? ? ? ? ? // 或是想打包整個目錄 用$zip->add_path($image_path);

? ? ? ? }

//----------------------

? ? ? ? $zip->output($dfile);

// 下載文件

? ? ? ? ob_clean();

header('Pragma: public');

header('Last-Modified:'.gmdate('D, d M Y H:i:s'). 'GMT');

header('Cache-Control:no-store, no-cache, must-revalidate');

header('Cache-Control:pre-check=0, post-check=0, max-age=0');

header('Content-Transfer-Encoding:binary');

header('Content-Encoding:none');

header('Content-type:multipart/form-data');

header('Content-Disposition:attachment; filename="'.$filename.'"');//設(shè)置下載的默認文件名

? ? ? ? header('Content-length:'. filesize($dfile));

$fp= fopen($dfile,'r');

while(connection_status()== 0 && $buf= @fread($fp,8192)){

echo $buf;

}

fclose($fp);

@unlink($dfile);

@flush();

@ob_flush();

exit();

}


//復(fù)制下面代碼保存


class zipfile {

var $datasec= array ();

var $ctrl_dir= array ();

var $eof_ctrl_dir= "\x50\x4b\x05\x06\x00\x00\x00\x00";

var $old_offset= 0;

function unix2_dostime($unixtime = 0){

$timearray= ($unixtime == 0)? getdate (): getdate($unixtime);

if ($timearray ['year']< 1980){

$timearray ['year']= 1980;

$timearray ['mon']= 1;

$timearray ['mday']= 1;

$timearray ['hours']= 0;

$timearray ['minutes']= 0;

$timearray ['seconds']= 0;

}

return (($timearray ['year']- 1980)<< 25)| ($timearray ['mon']<< 21)| ($timearray ['mday']<< 16)| ($timearray ['hours']<< 11)| ($timearray ['minutes']<< 5)| ($timearray ['seconds']>> 1);

}

function add_file($data,$name,$time = 0){

$name = str_replace('\\','/',$name);

$dtime= dechex($this->unix2_dostime($time));

$hexdtime= '\x' . $dtime [6]. $dtime [7]. '\x' . $dtime [4]. $dtime [5]. '\x' . $dtime [2]. $dtime [3]. '\x' . $dtime [0]. $dtime [1];

eval('$hexdtime = "' . $hexdtime. '";');

$fr= "\x50\x4b\x03\x04";

$fr.= "\x14\x00";

$fr.= "\x00\x00";

$fr.= "\x08\x00";

$fr.= $hexdtime;

$unc_len= strlen($data);

$crc= crc32($data);

$zdata= gzcompress($data);

$zdata= substr(substr($zdata,0,strlen($zdata)- 4),2);

$c_len= strlen($zdata);

$fr.= pack('V', $crc);

$fr.= pack('V', $c_len);

$fr.= pack('V', $unc_len);

$fr.= pack('v',strlen($name));

$fr.= pack('v',0);

$fr.= $name;

$fr.= $zdata;

$fr.= pack('V', $crc);

$fr.= pack('V', $c_len);

$fr.= pack('V', $unc_len);

$this->datasec []= $fr;

$cdrec= "\x50\x4b\x01\x02";

$cdrec.= "\x00\x00";

$cdrec.= "\x14\x00";

$cdrec.= "\x00\x00";

$cdrec.= "\x08\x00";

$cdrec.= $hexdtime;

$cdrec.= pack('V', $crc);

$cdrec.= pack('V', $c_len);

$cdrec.= pack('V', $unc_len);

$cdrec.= pack('v',strlen($name));

$cdrec.= pack('v',0);

$cdrec.= pack('v',0);

$cdrec.= pack('v',0);

$cdrec.= pack('v',0);

$cdrec.= pack('V',32);

$cdrec.= pack('V', $this->old_offset);

$this->old_offset+= strlen($fr);

$cdrec.= $name;

$this->ctrl_dir[]= $cdrec;

}

function add_path($path,$l = 0){

$d= @opendir($path);

$l = $l > 0 ? $l : strlen($path)+ 1;

while($v= @readdir($d)){

if($v== '.' || $v== '..'){

continue;

}

$v= $path . '/' . $v;

if(is_dir($v)){

$this->add_path($v,$l);

}else {

$this->add_file(file_get_contents($v),substr($v,$l));

}

}

}

function file(){

$data= implode('', $this->datasec);

$ctrldir= implode('', $this->ctrl_dir);

return $data. $ctrldir. $this->eof_ctrl_dir. pack('v',sizeof($this->ctrl_dir)). pack('v',sizeof($this->ctrl_dir)). pack('V',strlen($ctrldir)). pack('V',strlen($data)). "\x00\x00";

}

function add_files($files){

foreach($files as $file){

if (is_file($file)){

$data= implode("",file($file));

$this->add_file($data, $file);

}

}

}

function output($file){

$fp= fopen($file,"w");

fwrite($fp, $this->file ());

fclose($fp);

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末提前,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子旋廷,更是在濱河造成了極大的恐慌鸠按,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饶碘,死亡現(xiàn)場離奇詭異目尖,居然都是意外死亡,警方通過查閱死者的電腦和手機扎运,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門瑟曲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人豪治,你說我怎么就攤上這事洞拨。” “怎么了负拟?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵烦衣,是天一觀的道長。 經(jīng)常有香客問我,道長花吟,這世上最難降的妖魔是什么秸歧? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮衅澈,結(jié)果婚禮上键菱,老公的妹妹穿的比我還像新娘。我一直安慰自己今布,他們只是感情好纱耻,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著险耀,像睡著了一般弄喘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上甩牺,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天蘑志,我揣著相機與錄音,去河邊找鬼贬派。 笑死急但,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搞乏。 我是一名探鬼主播波桩,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼请敦!你這毒婦竟也來了镐躲?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤侍筛,失蹤者是張志新(化名)和其女友劉穎萤皂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匣椰,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡裆熙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了禽笑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片入录。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖佳镜,靈堂內(nèi)的尸體忽然破棺而出僚稿,到底是詐尸還是另有隱情,我是刑警寧澤邀杏,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布贫奠,位于F島的核電站唬血,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏唤崭。R本人自食惡果不足惜拷恨,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谢肾。 院中可真熱鬧腕侄,春花似錦、人聲如沸芦疏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酸茴。三九已至分预,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間薪捍,已是汗流浹背笼痹。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酪穿,地道東北人凳干。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像被济,于是被迫代替她去往敵國和親救赐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容