关于PHP文件下载

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();
            }
        }
    }

?>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值