2011-09-06 80 views
0

对于我的生活我看不出为什么,但它有正确的文件名和所有文件,但下载后文件本身是空的。据我可以看到它正确的位置,数据库也有正确的信息。正在下载空文件

function download() 
{ 
    global $session,$project,$config,$args; 

    $fid = $args[0]; 
    $query = query('SELECT * FROM files WHERE id = ?',$fid); 
    if(num($query) == 1) 
    { 
     $file = fetch($query); 
        //$happyfix = "http://imengine.gofreeserve.com/admin"; 
     $filename = URL . "/_files/{$file->in_project}/{$file->in_folder}/" . md5($fid) . ".{$file->extension}"; 
     //$filename = $happyfix . "/_files/{$file->in_project}/{$file->in_folder}/" . md5($fid) . ".{$file->extension}"; 
        if(ini_get('zlib.output_compression')) 
     { 
      ini_set('zlib.output_compression', 'Off'); 

     } 
     header("Pragma: public"); // required 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: private",false); // required for certain browsers 
     header("Content-Type: $file->mimetype"); 
     // change, added quotes to allow spaces in filenames, by Rajkumar Singh 
     header("Content-Disposition: attachment; filename=\"".$file->name . '.' . $file->extension."\";"); 
     header("Content-Transfer-Encoding: binary"); 
     header("Content-Length: ".filesize($filename)); 
     readfile("$filename"); 
     exit(); 
    } 
    else 
    { 
     redirect('That file does not exist','','error'); 
    } 
} 
+0

什么是这些文件的大小?你使用输出缓冲吗? –

+0

检查'$ filename'字符串是否正确 – tttony

+0

如果$ filename不正确,文件大小和读取文件都会产生一些错误。 –

回答

2

在发送文件数据之前,您没有发送标题。改变你的最后几行添加

header("Content-Length: ".filesize($filename)); 
ob_clean(); 
flush(); 
readfile("$filename"); 

看到http://php.net/manual/en/function.readfile.php

+0

文件是从7kb到400kb的任何地方,但大多数都像20 kb。我试过echo(“$ filename”);在readfile之前,但没有做任何事情。还添加了干净和冲洗,并且仍然是空的下载。我没有弄乱php或其他任何东西一年左右,所以请忍受我。 – Helpme

0

更改这个例子:

header("Content-Type: $file->mimetype"); 

到:

header("Content-Type: {$file->mimetype}"); 
+0

也尝试过,结果相同;空白。 :/ – Helpme