我有以下代码自动下载文件 点击提交按钮,一切似乎都运行良好; 该文件以严格格式,正确的大小,正确的名称下载,但是当我 想要打开它,我得到一个错误,文件无法读取,可能是什么 问题
$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);
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
我还有一个补充。如果文件大小很大,它将下载我们根本无法打开的空文件。这不是'readfile'函数本身的问题。问题是将大文件读入内存。因此,为了防止出现这种问题,我们必须在'readfile'函数之前立即使用'ob_end_flush()'来关闭输出缓冲区。
希望这个提示能节省时间。 :)