Home >Backend Development >PHP Tutorial >解决关于php中文文件上载有关问题

解决关于php中文文件上载有关问题

WBOY
WBOYOriginal
2016-06-13 10:54:12987browse

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

以下功能是在php中判断下载文件是否存在(包括中文、英文等),不存在则提示,存在便以服务器上的原名称下载,当然也可以自定义名称。

首先说明一点,网站目录如下:

/

....down.html

....sphinx技术交流.zip

....Lib

??? ......download.php

?

当然如果对网站的相对路径和绝对路径理解比较熟悉的,可以不用了解这目录布局,直接看源程序。

?

文件名为:down.html 下载页面





下载中心








?

文件名为:download.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 "";
??? 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;
}
?>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn