<?php
$file_name="hello.jpg";
if(!file_exists($file_name))
{
echo "文件不存在";
return;
}
$fp=fopen($file_name,"r");
//获取下载文件大小
$file_size=filesize($file_name);
echo $file_size;
//返回的文件
header("Content-type: application/octet-stream");
//按照字节大小返回
header("Accept-Ranges: byte");
//返回文件大小
header("Accept-Length: $file_size");
//这里客户端的弹出对话框,对应的文件名
header("Content-Disposition: attachment;filename=".$file_name);
$buffer=1024;
//判断文件是否到结尾,结束
while(!feof($fp))
{
//echo "1111";
$file_data=fread($fp,$buffer);
//把部分数据回送给浏览器
echo $file_data;
}
fclose($fp);
?>
打不开图片文件的提示是:因为此文件可能已经损坏,或者过大

解决方案 »

  1.   

    echo $file_size;    //这句注释掉
      

  2.   


    <?php
    require_once ("_global.inc.php");$dlfile = get_dlfile_url($_SERVER['QUERY_STRING'], 'http://www.ydtuiguang.com/', 'download/');//检查文件路径限制下载其它目录文件
    if(!exists_file($dlfile)){
    message_box('1040');
    }
    $filename = get_file_name($dlfile);
    $fileext = get_file_ext($dlfile);
    if(in_array(strtolower($fileext), array("", "js", "php", "inc", "xml", "html", "htm"))){//检测文件类型防止下载代码文件
    message_box('1040');
    }
    //调用下载
    _private_download($dlfile, $filename.'.'.$fileext);
    //以下是下PHP下载大文件函数
    function _private_download($url, $filename){
    // 获得文件大小, 防止超过2G的文件, 用sprintf来读
    $filesize = sprintf("%u", filesize($url)); 
    if (!$filesize) 

    return; 
    }        
    header("Content-type:application/octet-stream\n"); //application/octet-stream 
    header("Content-type:unknown/unknown;"); 
    header("Content-disposition: attachment; filename=\"".$filename."\""); 
    header('Content-transfer-encoding: binary');         
    if ($range = getenv('HTTP_RANGE')) // 当有偏移量的时候,采用206的断点续传头 

    $range = explode('=', $range); 
    $range = $range[1]; 

    header("HTTP/1.1 206 Partial Content"); 
    header("Date: " . gmdate("D, d M Y H:i:s") . " GMT"); 
    header("Last-Modified: ".gmdate("D, d M Y H:i:s", filemtime($url))." GMT"); 
    header("Accept-Ranges: bytes"); 
    header("Content-Length:".($filesize - $range)); 
    header("Content-Range: bytes ".$range.($filesize-1)."/".$filesize); 
    header("Connection: close"."\n\n"); 

    else 

    header("Content-Length:".$filesize."\n\n"); 
    $range = 0; 
    }
       _private_loadFile($url);               
    }function _private_loadFile($filename, $retbytes = true) {
    $buffer = '';
    $cnt =0;        
    $handle = fopen($filename, 'rb');
    if ($handle === false) {
    return false;
    }
    while (!feof($handle)) {
    $buffer = fread($handle, 1024*1024);
    echo $buffer;
    ob_flush();
    flush();
    if ($retbytes) {
    $cnt += strlen($buffer);
    }
    }
    $status = fclose($handle);
    if ($retbytes && $status) {
    return $cnt; // return num. bytes delivered like readfile() does.
    }
    return $status;

    ?>
      

  3.   


    $file_name="test.jpg";
    if(!file_exists($file_name)){   
      echo   "文件找不到";  
      exit;    
    }else{  
    $file = fopen($file_name,"r"); // 打开文件
    Header("Content-type: application/octet-stream");
    Header("Accept-Ranges: bytes");
    Header("Accept-Length: ".filesize($file_name));
    Header("Content-Disposition: attachment; filename=" . $file_name);
    echo fread($file,filesize($file_name));
    fclose($file);
    exit();
    }
      

  4.   

    可以了。 echo $file_size; //这句注释掉  为什么这个去掉就可以了啊  求解释。 。