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. Node异步

    一 Node异步工作原理 Node.js 异步编程的直接体现就是回调,回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数. 二 同步代码示例 先建立 ...

  2. JavaScript中with语句的理解

    with语句的作用是暂时改变作用域链.减少的重复输入. 其语法结构为: with(object){ //statements } 举一个实际例子吧: with(document.forms[0]){ ...

  3. javascript 对象初探 (四)--- 内建对象之旅之Array

     我们不要去纠结神马是内建对象,神马是內建构造器.到后来你们便会发现其实她们都是对象. Array()是一个构建数组的內建构造器函数: var arr = new Array(); 与下面的是等效的: ...

  4. chrome developer tool—— 断点调试篇

    断点,调试器的功能之一,可以让程序中断在需要的地方,从而方便其分析.也可以在一次调试中设置断点,下一次只需让程序自动运行到设置断点位置,便可在上次设置断点的位置中断下来,极大的方便了操作,同时节省了时 ...

  5. SharePoint 2013 配置基于表单的身份认证

    前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...

  6. SharePoint如何关掉mysite. how to disable mysite creation

    一个很简单的问题 center admin --> application managment -->manage service application -->user profi ...

  7. iOS 设置系统屏幕亮度

    // 设置系统屏幕亮度    //    [UIScreen mainScreen].brightness = value;    // 或者    [[UIScreen mainScreen] se ...

  8. Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...

  9. 【代码笔记】iOS-看图听声音

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> #import <AVFoundation/AVFo ...

  10. IT行业常见职位职业路线图

    我曾经面试过一些计算机相关毕业的应届生,问他希望做什么工作时,他回答只要是软件开发就好了,再细问一下你了解到的软件开发是怎样的?除了软件开发,还有其它什么工作?就答不出来了. 这里我先给出一张IT知识 ...