首頁 後端開發 php教程 PHP實作多種格式檔案下載並解決亂碼問題

PHP實作多種格式檔案下載並解決亂碼問題

Aug 08, 2016 am 09:20 AM
case header quot span

這幾天寫項目,遇到一個問題,一般的文件下載還好說,但是如果是中文且有多種格式的文件下載就比較棘手,調了很久的BUG,

終於完成,其中需要注意以下幾點:

1.對於文件名是中文的文件,要記得轉碼,防止中文亂碼的發生,因為大部分的主機的編碼是GB2312的,而我們用的是UTF-8,

所以在操作之前要用iconv()函數進行轉碼,防止找不到文件而報錯。

2.需要對所要下載的檔案的格式進行判斷,根據格式再寫header()函數。

具體代碼如下:

<?php 
	header("Content-type:text/html;charset=utf-8");
	
        $filename = "大学英语选课说明.docx";  //文件名
	$filename = iconv("utf-8","gb2312//IGNORE",$filename);  //转码
	$file = "upload/".$filename;  //文件路径
	$len = filesize($file);  //文件大小
        $file_extension = strtolower(substr(strrchr($filename,"."),1));  //文件后缀名
 
    switch( $file_extension )   //判断文件类型
    {
      case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "docx":
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;
 
      case "php":
      case "htm":
      case "html": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;
 
      default: $ctype="application/force-download";
    }
 
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
     
    header("Content-Type: $ctype");
 
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile($file);

?> 
登入後複製

對於適配不同瀏覽器,避免發生中文亂碼錯誤,本人在網上找到一段代碼,可以避免,代碼如下:

沒有用這段程式碼的原因是上面我寫的程式碼我試了一下如:Firefox,IE,Opera,360等這些瀏覽器,沒有發生因為瀏覽器問題
產生的亂碼錯誤,我認為,轉碼後中文亂碼的問題基本上就解決了。

本人經驗,僅供參考!

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了PHP實作多種格式檔案下載並解決亂碼問題,包括了方面的內容,希望對PHP教學有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
SpringBoot怎麼透過Feign呼叫傳遞Header中參數 SpringBoot怎麼透過Feign呼叫傳遞Header中參數 May 16, 2023 pm 08:38 PM

【SpringBoot】透過Feign呼叫傳遞Header中參數如何透過Feign傳遞Header參數問題描述我們在SpringCloud中使用Feign請求另一個服務的Api介面時,有將Header中參數傳遞下去的需求,如果不做特殊處理,就會將Header中的參數遺失。解決方案方案一:透過@RequestHeader(name="headerName")來傳遞例如:Feign定義如下@FeignClient(name="service-name")pub

linux的header是什麼意思 linux的header是什麼意思 Jul 18, 2023 pm 03:34 PM

linux的header是指在文件或資料流中的開頭部分,用於包含關於內容的元數據,透過正確地編寫和使用Header文件,開發者能夠更好地利用系統資源,提高程式碼的可讀性和可維護性。

php header頭怎麼實現跳轉 php header頭怎麼實現跳轉 Dec 02, 2022 am 09:14 AM

php header實作跳轉的方法:1、使用「Header("Location:$url");」語法實作跳轉;2、使用if判斷式實作跳轉,其跳轉語句如「if($_COOKIE[" u_type"]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');」。

如何使用PHP header()方法調整網頁 如何使用PHP header()方法調整網頁 Mar 28, 2023 pm 01:54 PM

PHP是一種功能強大的程式語言,可以用來創建動態網站和Web應用程式。其中一個最強大的功能之一是PHP的header()方法。在本文中,我們將探討如何使用PHP的header()方法來調整網頁。

html5標籤head和header有什麼差別 html5標籤head和header有什麼差別 Jan 17, 2022 am 11:10 AM

區別:1、head標籤用於定義文檔頭部,它是所有頭部元素的容器,而header標籤用於定義文檔的頁眉(介紹資訊);2、瀏覽器都支援head標籤,而舊版本瀏覽器皆不支援header標籤,需要IE9+以上瀏覽器才能支援header標籤。

HMD Skyline 獲得新的顏色選項和官方磁性外殼 HMD Skyline 獲得新的顏色選項和官方磁性外殼 Aug 23, 2024 am 07:04 AM

上個月推出 HMD Skyline(亞馬遜售價 499 美元)時,它有兩種顏色:霓虹粉和扭曲黑。現在,第三種顏色加入了藍色托帕石的行列。 HMD Global 也宣布了 PH 的官方案例

PHP檔案下載函數大全:readfile、header、Content-Disposition等函數的檔案下載實例分析 PHP檔案下載函數大全:readfile、header、Content-Disposition等函數的檔案下載實例分析 Nov 18, 2023 pm 03:26 PM

PHP檔案下載函數大全:readfile、header、Content-Disposition等函數的檔案下載實例分析檔案下載是Web應用程式中必不可少的功能之一,而PHP作為一種廣泛使用的Web開發語言,提供了多種實作文件下載的函數和方法。本文將介紹PHP常用的檔案下載函數,包括readfile、header、Content-Dispo

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

See all articles