`

解决关于php中文文件下载问题

    博客分类:
  • PHP
阅读更多

以下功能是在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
1
分享到:
评论

相关推荐

    PHP的FPDF的中文包chinese.php

    `chinese.php`文件就是为了解决这个问题,它提供了对中文字符集的支持。通常,它会包含一些预定义的TrueType字体或者提供一个方法来添加可以显示中文的字体文件。 `chinese.php`可能包含以下功能: 1. **字体引入*...

    PHP中文乱码问题解决方法

    PHP中文乱码问题解决方法 PHP中文乱码是PHP开发中的常见问题之一。该问题可能发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。解决该问题需要从多方面入手,包括PHP网页的编码、PHP与MySQL的...

    完美解决PHP中文乱码问题

    ### 完美解决PHP中文乱码问题:深入解析与实用指南 #### 一、理解PHP中文乱码问题 在PHP编程中,中文乱码问题是开发者经常遇到的挑战,尤其是在处理多语言网站或应用时。这一问题主要源于字符集编码不一致,即数据...

    制作个php网页,当访问该PHP页面时自动下载文件,本例为下载APK APP安装包.zip

    在PHP中创建一个网页以实现访问时自动下载文件的功能,主要涉及到HTTP协议、文件系统操作以及用户代理检测等知识。以下是对这些知识点的详细说明: 1. **HTTP响应头控制**: 当用户访问PHP页面时,服务器需要通过...

    flex 文件上传 预览下载 及中文名乱码解决问题

    本篇文章将详细介绍如何在Flex中实现文件上传、预览、下载功能,并解决中文文件名在这些操作中可能出现的乱码问题。 首先,文件上传是通过HTTP的POST请求来实现的。在Flex中,我们可以使用`URLLoader`类来发送数据...

    phprpc中文文档

    最后,文档会汇总一些常见的问题和解决方案,为开发者遇到的问题提供快速解答。 总的来说,"phprpc中文文档"是一个全面且实用的资源,无论你是初次接触Phprpc还是已经有一定经验,都能从中获得有价值的信息,提升...

    基于PHP的File Manager(PHP文件管理器) 中文版.zip

    【标题】"基于PHP的File Manager(PHP文件管理器) 中文版.zip" 涉及的是一个用PHP语言开发的文件管理系统,专为中文用户设计。这个系统允许用户通过Web界面来管理和操作服务器上的文件和目录,提高了工作效率,简化了...

    php生成pdf,解决中文乱码

    要解决中文乱码问题,我们需要做以下几步: 1. 引入TCPDF库:在项目中引入TCPDF库,可以通过Composer安装或者直接下载源代码。 2. 设置字符集:在创建TCPDF对象时,必须指定字符集为UTF-8,例如: ```php ...

    PHPWord中文手册_Office_word_读取word_php_

    总的来说,PHPWord为PHP开发者提供了一套完整的解决方案,用于处理Word文档。这个中文手册详细地介绍了如何利用PHPWord进行各种操作,包括基础属性设置、文档读取、内容修改以及图片和表格处理。通过学习和实践这个...

    Linux php出现中文乱码的解决方法.docx

    除了修改 PHP 配置文件外,我们还可以使用 HTML 头信息来解决中文乱码问题。在我们的 HTML 文档头部添加以下代码: `; charset=UTF-8" /&gt;` 这样,我们的 HTML 文档就将使用 UTF-8 编码方式,这样可以正常显示中文...

    PHPWord中文手册.rar

    这个“PHPWord中文手册”正是为了解决这一需求,它详尽地介绍了如何利用PHPWord来生成和操作Word文档,包括自动化分页、插入图像以及表格等复杂操作。 PHPWord的使用极大地简化了在服务器端生成Word文档的过程,...

    FPDF 解决中文乱码,下载中文支持包chinese.php

    为了解决这个问题,我们需要下载并使用特定的中文支持包,如"chinese.php"。这个包包含了处理中文字符集所需的函数和配置,确保FPDF能够正确地显示和打印中文文本。 FPDF的工作原理是通过创建PDF对象,然后添加页面...

    完美解决PHP中文乱码

    解决PHP中文乱码问题的关键在于确保整个系统从文件到数据库的编码一致性。首先,确认PHP文件及其声明的编码是否一致;其次,确保PHP与MySQL之间的编码一致;最后,处理不同操作系统下的文件名编码问题。遵循上述步骤...

    强大的php生成word ,html,rtf,pdf框架(包含中文文档)

    1、解决编码问题,PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、GB2312或者utf8编码的话就会出现乱码,如果你用utf8编码,就查找类库中所有方法中的 utf8_encode 转码将其删除,如果你采用GBK...

    1.PHP使用插件fpdf fpdi 给PDF文件加水印(中文乱码)

    本文将详细讲解如何利用这两个插件为PDF文件添加水印,尤其是解决中文乱码的问题。 首先,fpdf是一个开源的PHP类库,它允许我们在服务器端生成PDF文件。fpdf提供了丰富的API,可以方便地创建、编辑和打印PDF文档。...

    php mssql扩展SQL查询中文字段名解决方法

    标题 "php mssql扩展SQL查询中文字段名解决方法" 描述了一个常见的问题,即使用PHP的mssql扩展处理SQL Server数据库中的中文字段名时遇到的查询错误。问题的关键在于,虽然SQL语句在SQL Server中可以正常运行,但在...

    mysql解决中文问题文档

    本文档将详细解析如何解决MySQL中的中文乱码问题,无需卸载MySQL,只需通过几条命令即可轻松解决。 首先,我们需要了解MySQL中的字符集概念。字符集决定了MySQL如何存储和显示数据,常见的有GBK、UTF-8等。GBK主要...

    php5帮助文档&php4完全中文手册

    《PHP5帮助文档&PHP4完全中文手册》是IT领域中非常重要的参考资料,尤其对于学习和精通PHP编程语言的开发者而言,这两份手册是不...这两份文档对于PHP初学者和专业开发者来说,都是提升技能和解决实际问题的重要资源。

    一个稀有的php中文帮助文档

    总的来说,“php_manual_zh.chm”作为PHP中文帮助文档,无论你是新手还是资深开发者,都是你解决问题、提升技能的得力助手。它将帮助你理解和掌握PHP的每一个角落,使你在PHP编程的世界里游刃有余。

Global site tag (gtag.js) - Google Analytics