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中文名文件下载实现的更多相关文章

  1. 解决FTP服务器上中文名文件下载后为空的问题

    转: 解决FTP服务器上中文名文件下载后为空的问题 2017年07月20日 15:19:21 代码的寂寞 阅读数 2428  版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  2. Aspose.Cells导出Excel(2)

    DataTable dtTitle = ds.Tables[]; DataTable dtDetail = ds.Tables[]; int columns = dtTitle.Columns.Cou ...

  3. Aspose.Cells导出Excel(1)

    利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...

  4. ServletContext对象

    **1 ServletContext对象   1)在web应用中,由服务器创建的唯一的一个对象是ServletContext   2)ServletContext对象在每一个Servlet中取得都是相 ...

  5. Servlet入门和ServletConfig、ServletContext

    Servlet是一门用于开发动态web资源的技术. 若想开发一个动态web资源,需要完成以下2个步骤: 1)编写一个Java类,实现servlet接口: 2)把开发好的Java类部署到web服务器中. ...

  6. 文件下载:"Content-disposition","attachment; filename=中文名>>>解决方案

    文件下载时常会出现如下问题: response.setHeader("Content-disposition","attachment; filename="+ ...

  7. Struts2文件下载中文名乱码

    Struts2中提供了快捷的下载方式,通过配置struts.xml文件即可实现文件的下载,但是功能实现后下载文件的文件名却出现乱码,或者直接来个***.action,让人很是无语,但很显然,这是中文乱 ...

  8. java 实现文件下载中文名不显示

    需要将指定字符串的编码转换成浏览器里面的ISO-8859-1编码 String name = new String(name.getBtes("utf-8"),"ISO- ...

  9. java 网络文件下载(并命中文名)

    public void download(HttpServletRequest request, HttpServletResponse response){ //获取服务器文件 String fil ...

随机推荐

  1. [outlook]打开以后就自动进入安全模式的解决方法。Outlook start in safe mode.

    给客户写了一个Outlook的add-in, 用现在时髦的话应该叫outlook的app. 这个add-in的作用就是把outlook中的email,直接上传到SharePoint中.想要代码的联系我 ...

  2. iOS使用Charles(青花瓷)抓包并篡改返回数据图文详解

    写本文的契机主要是前段时间有次用青花瓷抓包有一步忘了,在网上查了半天也没找到写的完整的教程,于是待问题解决后抽时间截了图,自己写一遍封存在博客园中以便以后随时查阅. charles又名青花瓷,在iOS ...

  3. 对tableView三种计算动态行高方法的分析

    tableView是一个神奇的东西,可以这么说,就算是一个初学者如果能把tableView玩的很6,那编一般的iOS的需求都问题不大了.tableView是日常开发中用烂了的控件,但是关于tableV ...

  4. android加固系列—1.如何检验so文件是否加壳成功

    程序对so文件加壳后,如何验证是否加壳成功呢,首先除了能在应用中正常运行外,还要用IDA来检测: 绿色乱码表示rr这个函数成功加密: 工具下载,可支持动态调试版:

  5. Android Launcher 3 简单分析

    最近在学习Android Launcher的相关知识,在github上找到可以在Android studio上编译的Launcher 3代码,地址:https://github.com/rydanli ...

  6. View相关知识学习总结

    (一)LayoutInflater原理分析 LayoutInflater主要用于加载布局.通常情况下,加载布局的任务都是在Activity中调用setContentView()方法来完成的,该方法内部 ...

  7. MPlayerX——MAC OS 最好用的播放器

    MPlayerX真是一个不错的软件,它真的可以称得上在MAC OS里最好用的播放器,它功能强大,可以播放你所知道的任何格式的视频和音频文件.他的选项非常丰富,可以自定义设置的东西很多,但又不失简洁的风 ...

  8. linux下安装opcache扩展

    linux下安装opcache扩展   参考:http://www.php.net/manual/zh/opcache.installation.php 1 2 3 4 5 6 7 wget http ...

  9. 模仿password输入框

    function hiddenPass(event) { var password0 = document.getElementById("password0"); var pas ...

  10. 挖一挖C#中那些我们不常用的东西之系列(2)——IsXXX 系列方法

    不知道有人做没做过对日外包,如果做过的话,那么对vb.net应该非常熟悉了,当年我刚毕业的时候也做过四个月的外包,那种日子简直 不是人过的,就连大楼下面买珠宝的阿姨都说,这些孩子,只看过他们上班,就没 ...