如果单单是下载文件, 可简单得很,
$file='/path/filename.txt';
$filename='filename.txt';
header("Content-Type: ".filetype($file));
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
header("Content-Length: ".filesize($file));
readfile($file);
这样即可, 但是,如果$filename中有中文字(比如$filename="文档.txt"),下载的文件就会是乱码。所以,完整的写法为:
$file='/path/filename.txt';
if(!file_exists($file)) throw new Exception('File was not exist.');
$filename='filename.txt';
$ua = $_SERVER["HTTP_USER_AGENT"];
$encoded_filename = urlencode($filename);
$encoded_filename = str_replace("+", "%20", $encoded_filename);
header("Content-Type: ".filetype($file));
if (preg_match("/MSIE/", $ua)) {
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
} else if (preg_match("/Firefox/", $ua)) {
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
} else {
header('Content-Disposition: attachment; filename="' . $filename . '"');
}
header("Content-Length: ".filesize($file));
@readfile($file);

本文提供了一段PHP代码示例,用于解决不同浏览器环境下含有中文名称文件的正确下载问题。通过判断用户代理来适配IE、Firefox等浏览器,确保文件名正确显示。
236

被折叠的 条评论
为什么被折叠?



