正在下载空文件

时间:2011-09-06 01:17:50

标签: php

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

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');
    }
}

2 个答案:

答案 0 :(得分:2)

在发送文件数据之前,您没有发送标头。更改最后几行以添加

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

请参阅http://php.net/manual/en/function.readfile.php

上的示例

答案 1 :(得分:0)

改变这个:

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

为:

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