参考出处:

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. 每天响应数亿次请求,腾讯云如何提供高可用API服务?

    每天响应数亿次请求,腾讯云如何提供高可用API服务? https://mp.weixin.qq.com/s/OPwlHcqkaTT_gcwHfr5Shw 李阳 云加社区 2020-09-16 导语 | ...

  2. 1.kafka基础架构

    kafka基础架构 ## 什么是kafka? Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域. 1.什么是消息队列? 2.使用消息队列的好处 1)解耦 允许你独立的 ...

  3. InnoDB 事务隔离级探索

    https://mp.weixin.qq.com/s/gWYL2Th9Go5LDhkyGB_rYQ

  4. https://www.cs.cmu.edu/~dga/papers/cuckoo-conext2014.pdf 检验hash冲突

    https://github.com/google/cityhash We like to test hash functions with SMHasher, among other things. ...

  5. C#编写一个在asp.net core 3.1下的简单的corn模式的计划任务和一个更简单的定时器类

    asp.net core 下,新增了一个BackgroundService用来实现能在后台跑一个长久运行的任务,因此,也可以用来替换掉原来使用的static的Timer组件, Timer组件主要有以下 ...

  6. 通过 JFR 与日志深入探索 JVM - TLAB 原理详解

    全系列目录:通过 JFR 与日志深入探索 JVM - 总览篇 什么是 TLAB? TLAB(Thread Local Allocation Buffer)线程本地分配缓存区,这是一个线程专用的内存分配 ...

  7. Java 操作 HBase 教程

    Java 操作 HBase 教程 一.简介 二.hbase-client 引入 三.连接操作 四.表操作 五.运行测试 相关博文原文地址: 博客园:美码师:HBase(2) Java 操作 HBase ...

  8. liux 常用操作命令

    tail -f /home/jyapp/apache-tomcat-7.0.59/logs/catalina.out  //查看实施日志 //删除临时目录并且启动服务器 rm -rf /home/jy ...

  9. linux-Navicat连接linux远程数据

    linux-Navicat连接linux远程数据 (一)登陆数据库 (二)创建用户用于远程连接 GRANT ALL PRIVILEGES ON *.* TO '账号'@'%' IDENTIFIED B ...

  10. 服务器CPU又爆了?Linux快速排查Java程序占用CPU很高的方法

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的. 线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 1.场 ...