2

我有以下代码可以在单击提交按钮时自动下载文件,一切似乎都正常;文件以正确的格式下载,大小正确,名称正确,但是当我想打开它时,出现错误,无法读取文件,可能是什么问题?

$file=mysql_fetch_assoc($sel);
$file=$file['downloadlink'];
header('Content-Type: "application/octet-stream"');
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize($file));
header("Content-disposition: attachment; filename=\"".basename($file)."\"");
readfile($file);
4

2 回答 2

2

您可以尝试从readfile()评论中调整此功能:

function DownloadFile($file) { // $file = include path
    if(file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename='.basename($file));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        ob_clean();
        flush();
        readfile($file);
        exit;
    }
}
于 2013-06-26T12:05:18.343 回答
1

我对此有一个补充。如果文件很大,它会下载我们根本无法打开的空文件。这不是“readfile”函数本身的问题。问题是将大文件读入内存。因此,为了防止此类问题,我们必须在“readfile”函数之前使用“ob_end_flush()”来关闭输出缓冲区。

希望这个提示可以节省一些人的时间。:)

于 2014-01-16T05:06:48.560 回答