文件代码如下,
<?

$servername = $_SERVER['DOCUMENT_ROOT']."/files/doc/".$localfile;
$handle = fopen($servername, "wb");
fwrite($handle, $arow['DOC_BODY']);
fclose($handle);
header("Content-type: ".$arow['ATTACH_TYPE']);
header("Accept-Ranges: bytes");
header("Accept-Length: ".$arow['DOC_SIZE']);
header("Content-Disposition: attachment; filename=$localfile");
readfile($servername);
?>
本来是直接从数据库中将大字段数据取出来,直接header后,echo的,但总是不行,后来,就先把数据从数据库中取出,生成到服务器的文件夹下(此时,该文件是正常的),但再readfile后,服务器上的该文件本来有600多K,但下载下来总是不到600多K,每次执行,下载后的文件的大小都是变化的。但总是没有下载完全,这是为什么?有的文件又可以正常下载。

解决方案 »

  1.   


    header("Content-type: ".$arow['ATTACH_TYPE']); 
    header("Accept-Ranges: bytes"); 
    header("Accept-Length: ".$arow['DOC_SIZE']); 
    header("Content-Disposition: attachment; filename=$localfile"); 
    echo $arow['DOC_BODY'];
      

  2.   

    这种也不行,我当初也是用这段代码,下载后发现数据不全,我首先判断是文件上传时就有问题了,所以先将文件下载到服务器目录,结果发现文件是正常的,但再从服务器下载到本地(用readfile的方式)就不行了,难道与网络有关?
      

  3.   

    <?php// 以二进制格式打开文件
    $name = './img/ok.png'
    $fp = fopen($name, 'rb');// 发送合适的报头
    header("Content-Type: image/png");
    header("Content-Length: " . filesize($name));// 发送图片并终止脚本
    fpassthru($fp);
    exit;?> 
      

  4.   

    大尺寸文件的下载一般都会用chunk编码,你查查相关资料看看吧。 也许需要自己拆分下载内容。
      

  5.   

    首先在php脚本中加一句  set_time_limit(0); 试试对不对。如果不对,再看下面。
    你用的是Apache服务器吧,你用IE下载测试吧,在Firefox里应该不会有问题。如果是这样,
    你试试看你的Apache配置文件 httpd.conf 中的Timeout是不是设置的很短?默认为300一般不会有问题。