PHP中文名檔案下載實現

來源:互聯網
上載者:User

標籤:

  

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);

 

 

 

 

 

 

PHP中文名檔案下載實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.