<?php
   function down_file($file_name,$file_sub_dir){
       $file_name=iconv("utf-8","gb2312",$file_name);
       $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
       //打开文件
       if(!file_exists($file_path)){
           echo "文件不存在,抱歉";
           return;
        }
        $fp=fopen($file_path,"r");
        //获取要下载文件的大小
        $file_size=filesize($file_path);
        //设置返回的文件
        header("Content-type:application/octet-stream");
        //设置返回文件的单位,这里是字节
        header("Accept-Range:bytes");
        //设置返回文件的大小
        header("Accept-Length:$file_size");
        //设置客户端弹出对话框时候显示的文件名称
         header("Content-Disposition:attachment;filename=$file_name");
         //向客户端回送数据(分次回送)
         //设置每一次回送数据的大小   
         $buffer=1024;
         //设置一个文件字节读取计数器,以保证下载的安全
         $file_count=0;
         while((!feof($fp)) && ($file_size - $file_count > 0)){
          $file_data=fread($fp,$file_size);
          $file_count += $buffer;
          }
    fclose($fp);
    }down_file("Sunset.jpg","/filedown/down/");
?>

解决方案 »

  1.   

    $file_data=fread($fp,$file_size);
    你只从文件里读取了数据
    但没有将数据输出
    echo  $file_data;
      

  2.   


    while((!feof($fp)) && ($file_size - $file_count > 0)){
      $file_data=fread($fp,$file_size);
      $file_count += $buffer;
      }
    print($file_data);
    ……
      

  3.   

    $file_data=fread($fp,$file_size);
      $file_count += $buffer;这是什么玩意,$buffer又不是fread返回的长度,加它有何用? +strlen($file_data)