zoukankan      html  css  js  c++  java
  • 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);

     

     

     

     

     

  • 相关阅读:
    SharePoint 2013 图文开发系列之自定义字段
    SharePoint 2013 图文开发系列之Visual Studio 创建母版页
    SharePoint 2013 图文开发系列之代码定义列表
    SharePoint 2013 图文开发系列之计时器任务
    SharePoint 2013 图文开发系列之应用程序页
    SharePoint 2013 图文开发系列之事件接收器
    SharePoint 2013 图文开发系列之可视化WebPart
    SharePoint 2013 图文开发系列之WebPart
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 状态机工作流之日常报销示例
  • 原文地址:https://www.cnblogs.com/zhouqi666/p/5980543.html
Copyright © 2011-2022 走看看