這篇文章將為大家詳細(xì)講解有關(guān)php下載遠(yuǎn)程文件的源碼是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的長(zhǎng)治網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!最近遇到下載pdf格式的文件存在問(wèn)題 下載后看不了還有下載不了的問(wèn)題
大致思路是將文件先從遠(yuǎn)程下載后 再讀取下載到用戶本地電腦 再將文件刪除 不多說(shuō)了 直接貼源碼
遠(yuǎn)程文件的命名 最好使用英文數(shù)字組合 ,不要用中文命名 總會(huì)遇到你想不到的問(wèn)題
里面也包括壓縮下載 具體 大家看源碼 研究吧
<?php set_time_limit(0); //允許下載的url $allowed_url = [ '', '', '']; // 允許的url //$file_urls = post('file_urls'); $file_urls = '';//遠(yuǎn)程文件路徑 $file_url_arr = explode(',', $file_urls); $file_url_arr = array_unique($file_url_arr); // 過(guò)濾相同url //foreach ($file_url_arr as $key => $val) { // $url_arr = parse_url($val); // if (!isset($url_arr['host']) || !in_array($url_arr['host'], $allowed_url)) { // unset($file_url_arr[$key]); // } //} if (empty($file_url_arr)) { $output = array( 'status' => 2, 'code' => 999, 'error' => '未找到合法url', ); exit(json_encode($output)); } $download_dir = ROOT.'download'.DIRECTORY_SEPARATOR; if(!file_exists($download_dir)) mkdir($download_dir, 0777, true); $tmp_dir = $download_dir.time().rand(100, 999).DIRECTORY_SEPARATOR; // 文件臨時(shí)存放目錄 $downloader = new fileDownloader(); if($file_url_arr && !empty($file_url_arr)) $downloader->download($tmp_dir, $file_url_arr); // 下載文件 $file_lists = scandir($tmp_dir); $file_lists = array_diff($file_lists, ['.', '..']); $file_lists = array_values($file_lists); // 重置索引 if(empty($file_lists)){ $output = array( 'status' => 2, 'code' => 999, 'error' => '無(wú)下載文件', ); exit(json_encode($output)); } //if (count($file_lists) > 1) { // 如果是多個(gè)文件就壓縮 // $file_name = $downloader->compress($tmp_dir, $subject_title); //} else { $file_name = $file_lists[0]; // 如果是單個(gè)文件就直接輸出 //} $file_headers = get_headers($file_urls, 1); header("Cache-Control: public"); header("Content-Description: File Transfer"); //header('Content-disposition: attachment; filename='.basename($file_name)); //文件名 header('Content-Type: '.$file_headers['Content-Type']); //zip header("Content-Transfer-Encoding: binary"); //二進(jìn)制文件 header('Content-Length: '. filesize($tmp_dir.$file_name)); //文件大小 $user_agent = $_SERVER["HTTP_USER_AGENT"]; $encoded_name = rawurlencode($file_name); if (preg_match("/Firefox/", $user_agent)) { //火狐瀏覽器 header('Content-Disposition: attachment; filename*=utf-8\'\''.$encoded_name); } else { // IE, 谷歌瀏覽器 header('Content-Disposition: attachment; filename="' . $file_name . '"'); } ob_clean(); flush(); @readfile($tmp_dir.$file_name); $downloader->deleteDir($tmp_dir); //文件下載類 class fileDownloader{ // 下載文件 // $dir 文件存放地址,絕對(duì)路徑 // $urls 文件下載地址 public function download($dir, $urls = array()){ if (!file_exists($dir)) { mkdir($dir, 0777, true); } if (empty($urls)) { return; } foreach ($urls as $val) { $file_name_arr = explode('/', $val); // 使用 / 分隔url $file_name = array_pop($file_name_arr); // 彈出數(shù)組的最后一個(gè)元素,作為文件名 // 如果以linux作為主機(jī),需要將utf文件名轉(zhuǎn)換成GBK文件名 // if (PHP_OS != 'WINNT') { // $file_name = mb_convert_encoding($file_name, 'gbk', 'utf-8'); // 把文件名從utf-8轉(zhuǎn)換為gbk // } // $file_name = mb_convert_encoding($file_name, 'gbk', 'utf-8'); // 把文件名從utf-8轉(zhuǎn)換為gbk // 下載文件 $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$val); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); $data = curl_exec($ch); error_log(var_export(curl_getinfo($ch), 1)); curl_close($ch); if ($data) { // 保存文件 file_put_contents($dir.$file_name, $data); } } } // 壓縮文件 // $dir 掃描目錄 // $filename 壓縮文件名 public function compress($dir, $filename = false){ if (!file_exists($dir)) { return false; } $file_lists = scandir($dir); // 掃描文件夾 $file_lists = array_diff($file_lists, ['.', '..']); //去除上級(jí)目錄和當(dāng)前目錄 if (empty($file_lists)) { return false; } if (!$filename) { $filename = time().rand(111, 999).'.zip'; } else { $filename .= '.zip'; } $fullname = $dir.$filename; // 帶路徑的壓縮文件名 if (!file_exists($fullname)) { $zip = new ZipArchive(); if ($zip->open($fullname, ZipArchive::CREATE)==TRUE) { foreach($file_lists as $val){ if(file_exists($dir.$val)){ $zip->addFile($dir.$val, $val); } } $zip->close(); } } return $filename; } // 遞歸刪除文件和文件夾 // $path 要?jiǎng)h除的文件路徑 public function deleteDir($path) { //如果是目錄則繼續(xù) if (is_dir($path)) { $file_lists = scandir($path);//掃描一個(gè)文件夾內(nèi)的所有文件夾和文件并返回?cái)?shù)組 foreach ($file_lists as $val) {//排除目錄中的.和.. if ($val != "." && $val != "..") {//如果是目錄則遞歸子目錄,繼續(xù)操作 if (is_dir($path . $val)) {//子目錄中操作刪除文件夾和文件 self::deleteDir($path . $val . '/');//目錄清空后刪除空文件夾 @rmdir($path . $val . '/'); } else {//如果是文件直接刪除 unlink($path . $val); } } } @rmdir($path); } } }
關(guān)于php下載遠(yuǎn)程文件的源碼是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:php下載遠(yuǎn)程文件的源碼是什么-創(chuàng)新互聯(lián)
文章地址:http://jinyejixie.com/article16/cshpdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站導(dǎo)航、外貿(mào)建站、網(wǎng)站制作、定制網(wǎng)站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容