Home  >  Article  >  Backend Development  >  php文件下载乱码有关问题

php文件下载乱码有关问题

WBOY
WBOYOriginal
2016-06-13 11:21:01842browse

php文件下载乱码问题
我想添加一个文件上传下载功能,由于文件可能较大,所以思路是在数据库中存储文件在服务器上的路径,下载时根据路径读取文件。最开始在上传时页面文件列表显示的中文文件名为乱码,添加了

mysql_query("SET NAMES 'utf8'");
之后解决。后来在下载时存储的文件名为乱码,同样添加这个code解决。但是下载的文件里面的中文就成乱码了。我用txt文本测试,英文没问题,UTF-8格式的文本也没问题,默认的ANSI就成乱码,当然上传word文件也是乱码。大家帮忙看看应该怎么改,不知道是传到服务器就是乱码,还是下载下来格式没转换,我的数据库是UTF-8编码的,母版页也是UTF-8编码。

function DownloadFile($mineid,$notice=null){
global $smarty;
needLogin();
//session_cache_limiter('private');
$session=Session::start();
$curUser = $session->curUser;
$logger = new CategoryLogger('log_definition');
if($notice!="auto")notice($notice);

$id=$mineid;//要下载文件的ID
if(!isset($id) or $id=="") die("error:id none"); //定位记录,读出
$conn=mysql_connect('10.4.16.102','root','abc') or die('Unable to connect .');
mysql_select_db('greenmine',$conn) or die(mysql_error($conn));
mysql_query("SET NAMES 'utf8'");
$sql= "select * from file where id=$id";
$result= mysql_query($sql);
if(!$result) die("error:mysql query");
$num=mysql_num_rows($result);
if($num<1) die("error:no this recorder");

$data=mysql_result($result,0,"file_data"); //文件存储路径
$type=mysql_result($result,0,"file_type");
$name=mysql_result($result,0,"file_name");
mysql_close($conn);

$file_name=$name;
$file_dir=$data;
if (!file_exists($file_dir)) { //检查文件是否存在
echo "文件找不到";
exit;
} else {
$filePath = $file_dir;//此处给出你下载的文件在服务器的什么地方
$fileName = $file_name;
//此处给出你下载的文件名
$file = fopen($filePath, "r"); // 打开文件

Header("Content-type:application/octet-stream ");
Header("Accept-Ranges:bytes ");
Header("Accept-Length: " . filesize($filePath));
Header("Content-Disposition: attachment; filename= " . $fileName);

// 输出文件内容
echo fread($file, filesize($filePath));
fclose($file);
exit;
}
}
?>


------解决方案--------------------
是文件名乱码,还是文件内容乱码?
你的库中只保存文件名,而文件是独立保存的。不是这样吗
打开文件要 $file = fopen($filePath, "rb");

供下载的文件名
Header("Content-Disposition:   attachment;   filename= " . $fileName);
要与用户所用操作系统配套
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