我有以下代码用于自动下载文件点击提交按钮,一切似乎都很好;文件以正确的格式、正确的大小、正确的名称下载,但当我想打开它,我收到一个错误,文件无法读取,可能是什么问题
$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);
您可以尝试从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;
}
}
我对此有一个补充。如果文件大小很大,它会下载我们根本无法打开的空文件。这不是"readfile"函数本身的问题。问题是将大文件读入内存。因此,为了防止这种问题,我们必须在"readfile"函数之前立即使用"ob_end_flush()"来关闭输出缓冲区。
希望这条建议能节省一些时间。:)