PHP實現(xiàn)打包下載文件的方法示例
本文實例講述了PHP實現(xiàn)打包下載文件的方法。分享給大家供大家參考,具體如下:
/** * 下載文件 * @param $img * @return string */ public function Download($img) { $items = []; $names = []; if($img) { //用于前端跳轉(zhuǎn)zip鏈接拼接 $path_redirect = '/zip/'.date('Ymd'); //臨時文件存儲地址 $path = '/tmp'.$path_redirect; if(!is_dir($path)) { mkdir($path, 0777,true); } foreach ($img as $key => $value) { $fileContent = ''; $fileContent = $this->CurlDownload($value['url']); if( $fileContent ) { $__tmp = $this->SaveFile( $value['url'] , $path , $fileContent ); $items[] = $__tmp[0]; $names[] = $value['name'].'_'.($key+1).'.'.$__tmp[1]; } } if( $items ) { $zip = new ZipArchive(); $filename = time().'download.zip'; $zipname = $path.'/'.$filename; if (!file_exists($zipname)) { $res = $zip->open($zipname, ZipArchive::CREATE | ZipArchive::OVERWRITE); if ($res) { foreach ($items as $k => $v) { $value = explode("/", $v); $end = end($value); $zip->addFile($v, $end); $zip->renameName($end, $names[$k]); } $zip->close(); } else { return ''; } //通過前端js跳轉(zhuǎn)zip地址下載,讓不使用php代碼下載zip文件 //if (file_exists($zipname)) { //拼接附件地址 //$redirect = 域名.$path_redirect.'/'.$filename; //return $redirect; //header("Location:".$redirect); //} //直接寫文件的方式下載到客戶端 if (file_exists($zipname)) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header('Content-disposition: attachment; filename=附件.zip'); //文件名 header("Content-Type: application/zip"); //zip格式的 header("Content-Transfer-Encoding: binary"); //告訴瀏覽器,這是二進(jìn)制文件 header('Content-Length: ' . filesize($zipname)); //告訴瀏覽器,文件大小 @readfile($zipname); } //刪除臨時文件 @unlink($zipname); } } return ''; } } /** * curl獲取鏈接內(nèi)容 * @param $url * @return mixed|string */ public function CurlDownload($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $errno = curl_errno($ch); $error = curl_error($ch); $res=curl_exec($ch); curl_close($ch); if($errno>0){ return ''; } return $res; } /** * 保存臨時文件 * @param $url * @param $dir * @param $content * @return array */ public function SaveFile( $url ,$dir , $content) { $fname = basename($url); //返回路徑中的文件名部分 $str_name = pathinfo($fname); //以數(shù)組的形式返回文件路徑的信息 $extname = strtolower($str_name['extension']); //把擴(kuò)展名轉(zhuǎn)換成小寫 $path = $dir.'/'.md5($url).$extname; $fp = fopen( $path ,'w+' ); fwrite( $fp , $content ); fclose($fp); return array( $path , $extname) ; }
引用:
$img = [['url'=>'地址url/1.jpg','name'=>'名字']]; Download($img);
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP操作zip文件及壓縮技巧總結(jié)》、《php文件操作總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運算與運算符用法總結(jié)》、《PHP基本語法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
php阿拉伯?dāng)?shù)字轉(zhuǎn)中文人民幣大寫
這篇文章主要介紹了php阿拉伯?dāng)?shù)字轉(zhuǎn)中文大寫金額,分享了兩種實現(xiàn)方法,感興趣的小伙伴們可以參考一下2015-12-12解析在PHP中使用mysqli擴(kuò)展庫對mysql的操作
本篇文章是對在PHP中使用mysqli擴(kuò)展庫對mysql的操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07PHP+Ajax實現(xiàn)的無刷新分頁功能詳解【附demo源碼下載】
這篇文章主要介紹了PHP+Ajax實現(xiàn)的無刷新分頁功能,結(jié)合具體實例形式分析了php+ajax通過pdo操作類讀取數(shù)據(jù)庫并分頁顯示的相關(guān)實現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-07-07php中cURL?error?60:SSL?certificate?problem:?unable?to?
PHP中cURL錯誤60通常表示SSL證書問題,即無法獲取本地頒發(fā)機構(gòu)證書,這通常是由于cURL無法驗證遠(yuǎn)程服務(wù)器的SSL證書導(dǎo)致的,本給大家介紹了如何解決php中cURL?error?60,需要的朋友可以參考下2023-12-12php銀聯(lián)網(wǎng)頁支付實現(xiàn)方法
這篇文章主要介紹了php銀聯(lián)網(wǎng)頁支付實現(xiàn)方法,實例分析了php操作銀聯(lián)網(wǎng)支付接口的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03PHP parse_ini_file函數(shù)的應(yīng)用與擴(kuò)展操作示例
這篇文章主要介紹了PHP parse_ini_file函數(shù)的應(yīng)用與擴(kuò)展操作,結(jié)合實例形式分析了php擴(kuò)展parse_ini_file函數(shù)解析配置文件相關(guān)操作技巧,需要的朋友可以參考下2019-01-01