参考出处:

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

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

背景介绍:

文件名  为英文时可以下载,文件名 为中文时报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中的任意一种。这该怎么解决?

Nginx环境下,PHP下载,中文文件,下载失效(英文可以下载)怎么解决呢?的更多相关文章

  1. linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg)

     linux环境下安装sphinx中文支持分词搜索(coreseek+mmseg) 2013-11-10 16:51:14 分类: 系统运维 为什么要写这篇文章? 答:通过常规的三大步(./confi ...

  2. 【thinkphp 5 在nginx 环境下路由无法生效(404 500错误 )的解决方法】

      非常惭愧的说,由于之前一直使用的是windowservice,安装apache来进行服务器布置的,这种方式也是最简单最直接的方式, 但是由于php的服务大多都是linux栈的,咱们也不能落后呀,在 ...

  3. FormData使用方法详解,以及在IE9环境下,前端的文件上传问题

    FormData的主要用途有两个: 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率. 2.异步上传文件 一.创建formData对象 ...

  4. nginx环境下配置nagiosQL-关于nagiosql配置文件

    接上文:nginx环境下配置nagios-关于nginx.conf nagiosql文件应该处于conf/domain/目录下 nagiosql配置如下: ;                  gzi ...

  5. Nginx环境下配置PHP使用的SSL认证(https)

    最近一段时间发现好多网站都从http协议变成了加密的https协议,比如说百度.吾志等等.https看起来比http高端了好多,而且在不同的浏览器向上还会显示出不同于http的URL展示效果(比如说c ...

  6. Nginx环境下设置zblog伪静态方法

    Apache的环境非常简单.可以点击创建 .htaccess就可以了 Nginx环境下设置伪静态,并没有那个一键创建的按钮.只看到了这样的一个提示. 别的环境未测试.宝塔面板中 反正我是没找到. 宝塔 ...

  7. nginx环境下配置nagios-关于nagios配置文件nginx.conf

    接上文:nginx环境下配置nagios-关于nginx.conf 配置如下: ;          location ~ .*\.(php|php5)?$          {            ...

  8. windows环境下svn同步web文件[转]

    windows环境下svn同步web文件 SVN在团队开发中使用非常普遍,是一个很方便的版本控制系统. 如果要是能将SVN服务器上的数据自动发布到Web服务器,那将是整个项目开发.测试更加便捷.利用S ...

  9. dedecms 在php5.4以上环境下 无法保存中文

    dedecms gbk版本在php5.4以上环境下 无法保存中文 原因在于5.4.0对这个函数的变化:htmlspecialchars5.4.0   The default value for the ...

随机推荐

  1. uni-app开发经验分享九: 组件传值

    一.父组件向子组件传值 通过props来实现,子组件通过props来接收父组件传过来的值! 1.逻辑梳理 父组件中: 第一步:引入子组件: import sonShow from '../../com ...

  2. Bitter.Core系列八:Bitter ORM NETCORE ORM 全网最粗暴简单易用高性能的 NETCore 之 事务

    Bitter.Core 编写事务相当简单,Bitter.Core 尽可能的将代码编写量降为最低,例外一方方面保证客户主观能控制代码.Bitter.Core 事务提交,支持Builkcopy事务,原生事 ...

  3. spring restTemplate 进行http请求的工具类封装

    本文为博主原创,未经允许不得转载: 1.对常用调用的方法进行封装: import org.springframework.http.HttpHeaders; import com.alibaba.fa ...

  4. tcp的3次握手4次挥手

  5. python 招聘数据分析

    导入包 import pandas as pd import numpy as np import matplotlib.pyplot as plt 读文件 df=pd.read_csv(r'C:\U ...

  6. 拓扑排序(topo sort)之 最大食物链计数( 洛谷P4017)

    前言: 复习复习拓扑排序,自己把自己弄没了/kk 题目传送门 简化题意: 在一个DAG中,求从所有入度为0的点到所有出度为0的点路径的条数 md理解错题意把自己卡了半天,生物学的好的就可以直接理解为求 ...

  7. BZOJ2120 数颜色(带修改的莫队算法)

    Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜 ...

  8. Oracle数据传输MySQL中文编码问题

    最近捣鼓数据库,当使用Navicat将Oracle的数据传输给MySQL时,如果Oracle表中存在中文,则该表传输会出错,错误为: [ERR] 1366 - Incorrect string val ...

  9. 数据中心网络技术新贵:VXLAN与园区网络虚拟化

    摘要:为了应对传统数据中心网络对服务器虚拟化技术的限制,VXLAN技术应运而生. 1 概述 传统数据中心网络面临的问题 虚拟机规模受设备表项规格限制 在传统二层网络中,交换机通过查询MAC地址表来转发 ...

  10. SignalR入坑笔记

    什么是SignalR ASP.NET Core SignalR 是一个开源库,它简化了向应用程序添加实时 web 功能的功能. 实时 Web 功能使服务器端代码能够即时将内容推送到客户端. ASP.N ...