PHP文件下载,字符格式下载,出现浏览器兼容问题,
<?php
header("Content-Type: text/html;charset=utf-8");
$file_name=$_GET["file_name"];
$aa=explode('/',$file_name);
$name=$aa[2];
$name=urlencode($name);
$file_dir='./files/'.$name;
if(!file_exists($file_dir)){
echo "<script>alert('文件不存在');window.history.back(-1);</script>";
}
$file_size=filesize($file_dir);
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".$file_size);
Header("Content-Disposition: attachment; filename=".$name);
$fp=fopen($file_dir,"r");
$buffer_size=1024;
$cur_pos=0;
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size)
{
$buffer=fread($fp,$buffer_size);
echo $buffer;
$cur_pos+=$buffer_size;
}
$buffer=fread($fp,$file_size-$cur_pos);
echo $buffer;
fclose($fp);
return true;
?>
以上方式在IE7里面没有问题,但是到了IE8,就会出现问题,解决方法
<?php
header("Content-Type: text/html;charset=utf-8");
$file_name=$_GET["file_name"];
$aa=explode('/',$file_name);
$name=$aa[2];
$name=urlencode($name);
$file_dir='./files/'.$name;
downFileFromServer($name, $file_dir);
function downFileFromServer($name, $file_dir)
{
if(file_exists($file_dir))
{
if(is_readable($file_dir))
{
if(Trim($name) == '')
{
$name = 'undefined';
}
ob_start();
ob_clean();
$file_size = filesize($file_dir);
header('Content-Encoding:none');
header('Cache-Control:private');
header('Content-Length:' . $file_size);
header('Content-Disposition:attachment; filename=' . $name);
header('Content-Type:application/octet-stream');
readfile($file_dir);
ob_flush();
}
}
}
?>