哦,程序前面还应该有"<?php",是我忘了写哈。。

解决方案 »

  1.   

    只能用fopen打开文件。注意必须用rb方式打开,不然就会有问题。
      

  2.   

    说具体点,让我直接搞定了就好了嘛我试了试fopen(),好像还是不行诶,而且下载下来的文件都是0kb大。。
      

  3.   

    <?
    //include("session.php");
    function download($file_dir,$file_prefix,$file_name){
    $file_dir = "../attachments/$file_dir/";
    $file_name = urldecode($file_name);
    $dl_name = $file_name;
    $file_name = $file_prefix."_".$file_name;
    if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
    echo "文件找不到";
    exit; 
    } else {
       clearstatcache();
    $file = fopen($file_dir . $file_name,"rb"); // 打开文件 
    // 输入文件标签
    header("Cache-control: private");
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: ".filesize($file_dir . $file_name));
    Header("Content-Disposition: attachment; filename=" . $dl_name);
    // 输出文件内容
    echo fread($file,filesize($file_dir . $file_name));
    fclose($file);
    exit;
    }}
    $dir=$_GET['dir'];
    $prefix=$_GET['prefix'];
    $name=$_GET['name'];
    download($dir,$prefix,$name);
    ?>
      

  4.   

    你自己稍微改一下吧。我这里的filename有编码,主要是因为有些文件名中有空格,而get方式传不过去。$prefix我文件前缀,我为了防止重复,每个文件在上传的时候都加个时间标签为前缀。你可以根据你需要修改。
    $dir是文件所在目录。
    直接调用download函数就可以了。
      

  5.   

    不行哦我把代码改成我需要的,下载下来的文件还是只有0kb诶,,代码如下:
    <?
    function download($file_dir,$file_name){
    //$file_dir = "../attachments/$file_dir/";
    $file_name = urldecode($file_name);
    $dl_name = $file_name;
    //$file_name = $file_prefix."_".$file_name;
    if (!file_exists($file_dir . $file_name)) { //检查文件是否存在
    echo "文件找不到";
    exit; 
    } else {
       clearstatcache();
    $file = fopen($file_dir . $file_name,"rb"); // 打开文件 
    // 输入文件标签
    header("Cache-control: private");
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: ".filesize($file_dir . $file_name));
    Header("Content-Disposition: attachment; filename=" . $dl_name);
    // 输出文件内容
    fread($file,filesize($file_dir . $file_name));
    fclose($file);
    exit;
    }}
    $dir="c:/";
    $name="csdn.rar";
    download($dir,$name);
    ?>
      

  6.   

    用file_get_contents($file_dir . $file_name)吧---
    ps: 老大,要用 echo fread($file,filesize($file_dir . $file_name)); 的
        只fread($file,filesize($file_dir . $file_name));有什么用啊
        要echo出来还有,不知道 C:/csdn.rar 有没有权限读取。
      

  7.   

    大哥,我开始就是用了echo的,我要是下载20M的rar文件,全部echo出来,你要我死机啊?
    开始的时候就是用了echo的,然后我的电脑就一动不动了
      

  8.   

    不得哟我下载rar文件的时候用你的代码,要echo就会死机的
      

  9.   

    $file="c:/csdn.rar";
    $dest="csdn.rar";
    down_file($file,$dest);
    function down_file($file,$dest){
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/x-zip");
    header("Content-Disposition: attachment; filename=$dest" );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($file));
    readfile($file);
    }
    ?>
      

  10.   

    不会吧,我的下载就是用的echo fread($file,filesize($file_name));方式做的
    这个有15M,虽然没有你说的20M大,但也足够说明问题了吧,而且还可以断点续传:
    http://www.mistruster.com/download.php?type=soft&id=2//...
    case "SOFT":
    $sql = "...";
    //...
    $file = fopen($file_name,"r");
    Header("Content-type: application/octet-stream");
    Header("Content-Length: ".filesize($file_name));
    Header("Accept-Ranges: bytes");
    header('Pragma: public');
    echo fread($file,filesize($file_name));
    fclose($file);
    //...我没用'rb'方式打开文件,但下载后.exe文件一样可以执行,并没有影响什么---
    RedHat Linux AS PHP 4.3.8 Apache 1.3.28
      

  11.   

    也许是我自己没有搞好吧,再试试。
    pswdf,,,你的方法,呵呵,好像不行诶,可以下载,但是打开下载后的文件会提示错误的。