PHP中文名文件下載實現


  

php下載文件的流程:

其實就是給予一個鏈接:  <a href="指向處理文件的地址"></a這樣,當前端點擊鏈接的時候,指向處理文件,比如download.php

本例題 download.php同級目錄下有resume.docx文件

<?php
    $file_name = 'resume.docx';
    $file_sub_path =$_SERVER['DOCUMENT_ROOT'].__ROOT__.'/Public/Download/';
    $file_path = $file_sub_path.$file_name;
    if (!file_exists($file_path)){  //判斷文件是否存在
        echo "文件不存在";
        exit();
    }
    $fp = fopen($file_path,"r+") or die('打開文件錯誤');   //下載文件必須要將文件先打開。寫入內存
    $file_size = filesize($file_path);
    Header("Content-type:application/octet-stream");
    //按照字節格式返回
    Header("Accept-Ranges:bytes");
    //返回文件大小
    Header("Accept-Length:".$file_size);
    //彈出客戶端對話框,對應的文件名
    Header("Content-Disposition:attachment;filename=".$file_name);
    //防止服務器瞬間壓力增大,分段讀取
    $buffer = 1024;
    while(!feof($fp)){
        $file_data = fread($fp,$buffer);
        echo $file_data;
    }
    fclose($fp);
}

知識點:

$_SERVER['DOCUMENT_ROOT'] 服務器的根路徑,比如我的電腦上是 d:wamp/www

__ROOT__THINKPHP中的用法,指向項目的根路徑,比如我的電腦是/tpblog

$file_sub_path 指向,所需要下載文件的路徑 d:wamp/www/tpblog/Public/Download

 

但是我遇到了一個問題,就是如果文件名改成中文的話,就會出現文件不存在的錯誤

后來找到解決辦法是

在開始申明

header("Content-type: text/html;charset=utf-8");

申明網頁的編碼格式

 

然后強制轉換編碼

$file_name = iconv("utf-8","gbk//IGNORE",$file_name);

UTF-8的編碼強制轉換為GBK

完整代碼如下:

本例題 download.php同級目錄下有測試簡歷.docx文件

 

header("Content-type: text/html;charset=utf-8");
$file_name = '測試簡歷.docx';
$file_name = iconv("utf-8","gbk//IGNORE",$file_name);
$file_sub_path =$_SERVER['DOCUMENT_ROOT'].__ROOT__.'/Public/Download/';
$file_path = $file_sub_path.$file_name;
if (!file_exists($file_path)){  //判斷文件是否存在
    echo "文件不存在";
    exit();
}
$fp = fopen($file_path,"r+") or die('打開文件錯誤');   //下載文件必須要將文件先打開。寫入內存
$file_size = filesize($file_path);
//返回的文件流
Header("Content-type:application/octet-stream");
//按照字節格式返回
Header("Accept-Ranges:bytes");
//返回文件大小
Header("Accept-Length:".$file_size);
//彈出客戶端對話框,對應的文件名
Header("Content-Disposition:attachment;filename=".$file_name);
//防止服務器瞬間壓力增大,分段讀取
$buffer = 1024;
while(!feof($fp)){
    $file_data = fread($fp,$buffer);
    echo $file_data;
}
fclose($fp);

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM