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

b5af7d3f2a7f270c1af645cedd2c42c9.png

1d15cb6514465007bdf2906c17391a5a.png

背景介绍:

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

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

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

②写一个下载处理函数。

$id:记录的id

$table:表名

$urlField:表中存储 路径+文件名.后缀 的字段function download($id,$table='tender_uploadfile',$urlField='upload_url'){

global $db,$pre;

$file = $db->get_one("SELECT A.* FROM `{$pre}{$table}` A WHERE A.id = '$id'");

$fileType = strtolower(strrchr($file[$urlField], '.'));

if(!$file || !file_exists(ROOT_PATH . $file[$urlField])){

showerr("I'm so sorry! File not found!",1);

} else {

//点击量

($table == 'tender_uploadfile') && @$db->query("UPDATE `{$pre}{$table}` SET hits = hits + 1  WHERE id = '$id'");

$fp = fopen(ROOT_PATH . $file[$urlField],"r");

header("Pragma: public");

header("Expires: 0");

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

header("Cache-Control: public");

header("Content-Description: File Transfer");

Header("Content-type: " . getFileMimeMapping($fileType));

Header("Accept-Ranges: bytes");

header('Content-Transfer-Encoding: binary');

Header("Accept-Length: ".filesize(ROOT_PATH . $file[$urlField]));

//若出现乱码iconv("utf-8","gbk",$file[upload_title]))

$fileName = $file[upload_title] ? $file[upload_title] : $file[title];

Header("Content-Disposition: attachment; filename=" . $fileName);

echo fread($fp, filesize(ROOT_PATH . $file[$urlField]));

/*此方式使用大文件,起缓存

$content = "";

while (!feof($fp)) {

$content .= fread($fp, 1024);

$stream_meta_data = stream_get_meta_data($fp); //Added line

if($stream_meta_data['unread_bytes'] <= 0) break; //Added line

}

*/

fclose($fp);

//echo $content;

}

exit;

}

问题:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值