PHP實(shí)現(xiàn)打包下載文件的方法示例
本文實(shí)例講述了PHP實(shí)現(xiàn)打包下載文件的方法。分享給大家供大家參考,具體如下:
/** * 下載文件 * @param $img * @return string */ public function Download($img) { $items = []; $names = []; if($img) { //用于前端跳轉(zhuǎn)zip鏈接拼接 $path_redirect = '/zip/'.date('Ymd'); //臨時(shí)文件存儲(chǔ)地址 $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 ''; } //通過(guò)前端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); } //刪除臨時(shí)文件 @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; } /** * 保存臨時(shí)文件 * @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運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- PHP/ThinkPHP實(shí)現(xiàn)批量打包下載文件的方法示例
- php在線打包程序源碼
- ThinkPHP實(shí)現(xiàn)將本地文件打包成zip下載
- php將文件夾打包成zip文件的簡(jiǎn)單實(shí)現(xiàn)方法
- PHP簡(jiǎn)單系統(tǒng)查詢模塊代碼打包下載
- 幾行代碼輕松實(shí)現(xiàn)PHP文件打包下載zip
- php打包網(wǎng)站并在線壓縮為zip
- PHP實(shí)現(xiàn)圖片批量打包下載功能
- php項(xiàng)目打包方法
- PHP在線打包下載功能示例
- php 仿Comsenz安裝效果代碼打包提供下載
- php打包壓縮文件之ZipArchive方法用法分析
相關(guān)文章
php阿拉伯?dāng)?shù)字轉(zhuǎn)中文人民幣大寫
這篇文章主要介紹了php阿拉伯?dāng)?shù)字轉(zhuǎn)中文大寫金額,分享了兩種實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2015-12-12簡(jiǎn)單的php寫入數(shù)據(jù)庫(kù)類代碼分享
簡(jiǎn)單的php寫入數(shù)據(jù)庫(kù)類代碼分享,學(xué)習(xí)php的朋友可以參考下。2011-07-07解析在PHP中使用mysqli擴(kuò)展庫(kù)對(duì)mysql的操作
本篇文章是對(duì)在PHP中使用mysqli擴(kuò)展庫(kù)對(duì)mysql的操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07PHP+Ajax實(shí)現(xiàn)的無(wú)刷新分頁(yè)功能詳解【附demo源碼下載】
這篇文章主要介紹了PHP+Ajax實(shí)現(xiàn)的無(wú)刷新分頁(yè)功能,結(jié)合具體實(shí)例形式分析了php+ajax通過(guò)pdo操作類讀取數(shù)據(jù)庫(kù)并分頁(yè)顯示的相關(guān)實(shí)現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-07-07php中cURL?error?60:SSL?certificate?problem:?unable?to?
PHP中cURL錯(cuò)誤60通常表示SSL證書問(wèn)題,即無(wú)法獲取本地頒發(fā)機(jī)構(gòu)證書,這通常是由于cURL無(wú)法驗(yàn)證遠(yuǎn)程服務(wù)器的SSL證書導(dǎo)致的,本給大家介紹了如何解決php中cURL?error?60,需要的朋友可以參考下2023-12-12PHP開(kāi)發(fā)注意事項(xiàng)總結(jié)
這篇文章主要介紹了PHP開(kāi)發(fā)注意事項(xiàng)總結(jié),非常詳細(xì),需要的朋友可以參考下2015-02-02php銀聯(lián)網(wǎng)頁(yè)支付實(shí)現(xiàn)方法
這篇文章主要介紹了php銀聯(lián)網(wǎng)頁(yè)支付實(shí)現(xiàn)方法,實(shí)例分析了php操作銀聯(lián)網(wǎng)支付接口的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03PHP parse_ini_file函數(shù)的應(yīng)用與擴(kuò)展操作示例
這篇文章主要介紹了PHP parse_ini_file函數(shù)的應(yīng)用與擴(kuò)展操作,結(jié)合實(shí)例形式分析了php擴(kuò)展parse_ini_file函數(shù)解析配置文件相關(guān)操作技巧,需要的朋友可以參考下2019-01-01