fread认为\01是文件结束符号。
用readfile吧,直接就输出了,也不用open了。或者file_get_contentsheader嘛找找rfc看看http部分就明白了

解决方案 »

  1.   

    文件下载的过程用fopen或者是readfile都没有问题,关键是没有这三句
    Header("Pragma: public");
    Header("Expires: 0");
    Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    读出的文件名称和路径都是错误的我英文基础差...
    那个rfc我至少得看半年......
      

  2.   

    to 楼主
    种情况下,用一个超链接打开新窗口或者原窗口下载都没有问题.但是当我用脚本自动打开新窗口下载的时候却不能够正常读出文件存放的路径名称,脚本如下:
    echo "<script lanuage=javascript>
    echo "window.open('./download.php?filename=$filename','_blank','');";
    echo "</script>";
    我的文件名称是一个时间值,如 2004-11-25_16:01:01.txt
    弹出的保存操作对话框中,我发现文件名这一项只读取到文件名的最后两位'01',连扩展名都没有,导致文件无法下载.
    但是加入了以下三句后就一切都正常了:
    Header("Pragma: public");
    Header("Expires: 0");
    Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    ---------------------------------
    事实上你只要将这句
    $fp=fopen($file_path.$file_name,"r");
    改为
    $fp=fopen($file_path.$_GET[file_name],"r");
    就好了,不用像上面那样加三行,其中第一行应该是设置可以读取全局变量的下面这些头,有点像HTTP或是FTP下载头的,不知道我解释的对不对,如果不对,还请下面的高手指正
    Header("Content-type: text/plain");//这个是内容类型证明是文本型的
    Header("Accept-Ranges: bytes");//这个是告诉浏览器从什么地方开始传输,这里是从开始,如果设置了数值的话,比如100 那么浏览器就认为是从100开始传送的,主要是用于断点续传。
    Header("Accept-Length: ".filesize($file_path.$file_name));//告诉浏览器文件大小是多少,主要用于浏览器来计算剩余下载时间或是预先分配存储空间等
    Header("Content-Disposition: attachment; filename=".$file_name);//这行就不太明白了。。
    请楼主核实我所说的
    请后来的高手指正错误。
      

  3.   

    Header("Content-Disposition: attachment; filename=".$file_name);//这行就不太明白了。。
    ===============
    这行是表明文件以附件形式下载,也就是出现下载提示框
      

  4.   

    ./download.php?filename=$filename
    这里是filename
    而你获取的时候是file_name
    是这里的笔误还是?你获取到的应该是前面付过值的,而不是浏览器传过来的吧。
      

  5.   

    to twt326(天地小子) 
    其实我的$file_name就是通过$_GET[file_name]获取的,没有那三句还是无法正确读取文件路径和名称.
    另外对于Header("Pragma: public");我觉得不是说明全局变量的,我倒是觉得是说明Cache的类型的.
    不过为问什么设置了Cache后就能够正确读出文件路径和名称呢?不解to  surfchen(冲浪) 
    请问,您是怎样解释那三句话的作用的?to  polygame(polygame)
    那个的确是笔误,谢谢纠正.$file_name是我根据时间规则构造好的文件名称,当我刷新文件下载界面的时候赋值给自动弹出窗口的脚本,然后通过弹出窗口调用下载过程
      

  6.   

    其它没看
    不过文件名2004-11-25_16:01:01.txt不正确
    不能包含冒号
    下载后会变成2004-11-25_16 01 01.txt
      

  7.   

    to turtlevan(你是猪啊,亲我还愣着干嘛) 
    thank,这个我注意到了,我已经换成2004-11-25_16-01-01.txt这种格式了,问题还是如上
      

  8.   

    对HTTP协议不是非常熟悉~~~~哎~~看来我要认真学习一下协议啦到现在我只能观望这个帖子了