TP中下载文件

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

猜你喜欢

转载自blog.csdn.net/ruipuwangluo/article/details/79735446
今日推荐