设为首页 收藏本站
查看: 415|回复: 0

[经验分享] 解决关于php中文文件下载问题

[复制链接]

尚未签到

发表于 2017-4-1 08:49:40 | 显示全部楼层 |阅读模式
  以下功能是在php中判断下载文件是否存在(包括中文、英文等),不存在则提示,存在便以服务器上的原名称下载,当然也可以自定义名称。
  首先说明一点,网站目录如下:
  /
  ....down.html
  ....sphinx技术交流.zip
  ....Lib
  ......download.php
  当然如果对网站的相对路径和绝对路径理解比较熟悉的,可以不用了解这目录布局,直接看源程序。
  文件名为:down.html 下载页面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>下载中心</title>
</head>

<body>
<script type="text/javascript" language="javascript">
    //用这个JS有利于以后多处调用时方便
    /**
    * 参数:
    * fn  ---  文件全名,包括扩展名
    * savefn  ---  下载文件时显示的名称,不包括扩展名
    */
    function downfile(fn,savefn){
        fn = encodeURI(fn);  //进行编码
        url = '/Lib/download.php?fn='+fn;
        if(savefn){
            savefn = encodeURI(savefn);  //进行编码
            url = url + '&savefn='+savefn;
        }
        window.location.href = url;
    }
</script>
<div class="Gmox">
<a href="javascript:downfile('sphinx技术交流.zip')" title="sphinx技术交流">sphinx技术交流</a>
</div>
</body>
</html>

  文件名为:download.php 处理下载程序页面
  <?php
header("Content-Type:text/html;charset=utf-8");
$fn = urldecode($_REQUEST['fn']);  //进行解码,文件名(包扩展名在内)
//判断下载名字为原名还是自定义
if(!empty($_REQUEST['savefn'])){
    $savefn = urldecode($_REQUEST['savefn']);  //进行解码,下载时显示的文件名(不包扩展名在内)
    $fnArr = explode('.',$fn);
    $savefn = $savefn.".".$fnArr[count($fnArr)-1];  //将utf-8转换为GB2312
}else{
    $savefn = $fn;  //将原文件名作为下载显示的文件名
}
$fn = iconv('UTF-8','GB2312//IGNORE',$fn);  //将utf-8转换为GB2312
$fp = '../'.$fn;  //下载文件的路径,如果换为 $fp = 'http://localhost/'.$fn; 会有问题,最好是用相对路径,直接从根目录往下

if (!is_file($fp)){ //检查文件是否存在
    echo "<script language='javascript' type='text/javascript'>alert('你下载的文件并不存在');window.history.back();</script>";
    exit;
} else {
    $savefn = iconv('UTF-8','GB2312//IGNORE',$savefn);
    $file = fopen($fp,"r"); // 打开文件
    header("Content-type: application/octet-stream");
    header("Accept-Ranges: bytes");
    header("Accept-Length: ".filesize($fp));
    header("Content-Disposition: attachment; filename=" . $savefn); #下载时显示的文件名
    echo fread($file,filesize($fp));
    fclose($file);
    exit;
}
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-358394-1-1.html 上篇帖子: PHP数组快速筛选函数的实现 下篇帖子: php判断浏览器和语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表