zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    参考出处:

    http://www.imooc.com/qadetail/76393

    Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢?

    554731700001f4e903570195.jpghttp://img.mukewang.com/5547318900011dd304670142.jpg

    背景介绍:

    文件名  为英文时可以下载,文件名 为中文时报404错误,而实际上服务器端  文件是存在的。

    网上找一下,据说是  URL发送时编码问题。有两种解决方案:

    ①打开浏览器,去掉默认的以utf8发送(测试过没问题,但因为要在客户端操作,所有没采纳)

    ②写一个下载处理函数。

    $id:记录的id

    $table:表名

    $urlField:表中存储 路径+文件名.后缀 的字段

     1 function download($id,$table='tender_uploadfile',$urlField='upload_url'){
     2     global $db,$pre;
     3     $file = $db->get_one("SELECT A.* FROM `{$pre}{$table}` A WHERE A.id = '$id'");
     4     $fileType = strtolower(strrchr($file[$urlField], '.'));
     5     if(!$file || !file_exists(ROOT_PATH . $file[$urlField])){
     6         showerr("I'm so sorry! File not found!",1);
     7     } else {
     8         //点击量
     9         ($table == 'tender_uploadfile') && @$db->query("UPDATE `{$pre}{$table}` SET hits = hits + 1  WHERE id = '$id'");
    10  
    11         $fp = fopen(ROOT_PATH . $file[$urlField],"r");
    12  
    13         header("Pragma: public"); 
    14         header("Expires: 0"); 
    15         header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    16         header("Cache-Control: public");  
    17         header("Content-Description: File Transfer"); 
    18  
    19         Header("Content-type: " . getFileMimeMapping($fileType));
    20         Header("Accept-Ranges: bytes");
    21         header('Content-Transfer-Encoding: binary'); 
    22         Header("Accept-Length: ".filesize(ROOT_PATH . $file[$urlField]));
    23         //若出现乱码iconv("utf-8","gbk",$file[upload_title]))
    24         $fileName = $file[upload_title] ? $file[upload_title] : $file[title];
    25         Header("Content-Disposition: attachment; filename=" . $fileName);
    26  
    27      
    28         echo fread($fp, filesize(ROOT_PATH . $file[$urlField]));
    29         /*此方式使用大文件,起缓存
    30         $content = "";
    31         while (!feof($fp)) {
    32             $content .= fread($fp, 1024);
    33             $stream_meta_data = stream_get_meta_data($fp); //Added line
    34             if($stream_meta_data['unread_bytes'] <= 0) break; //Added line
    35  
    36         }
    37         */
    38         fclose($fp);
    39         //echo $content;
    40     }
    41     exit;
    42 }

    问题:

    在IE、360上,下载时丢失文件后缀,或下载下来的为.php的文件,实际上传的为doc、rar、docx、zip中的任意一种。这该怎么解决?

  • 相关阅读:
    教程-Supports判断接口(Instance)是否支持
    Android实例-如何使用系统剪切板(XE8+小米2)
    Android实例-从照相机或图库获取照片(XE8+小米2)
    Android实例-TTabControl的使用(XE8+小米2)
    Android实例-闪光灯的控制(XE8+小米2)
    WCF小问题总汇
    wpf程序线程与UI内容交互
    xml解析原理一些想法
    XML序列化
    C#用正则表达式一键Unicode转UTF8(解决LitJson中文问题)
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/4906680.html
Copyright © 2011-2022 走看看