我无法下载已在我网站上传的文件,例如: 我已经上传了一个800mb文件大小的视频文件,没关系,文件保存到我文件夹中的目录,然后我想再次下载该文件,但是一下载文件,我就会得到1kb文件不是文件的确切大小,当我播放时,没有任何反应
这是我的代码:
<?php
include 'db.php';
if(isset($_REQUEST['name']))
{
$var =$_REQUEST['name'];
$dir = "../files/";
$file = $dir . $var;
if(file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: video');
header('Content-Disposition: attachment;
filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
mysqli_close($conn);
exit();
}
else{
echo "File not found";
}
}
?>
答案 0 :(得分:0)
是的,我也遇到了同样的问题。在互联网上搜索了很多之后,我发现问题与输出缓冲有关。以下代码解决了我的问题。
<?php
$file = $_GET['file'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_end_clean(); //adding this line solves my problem
readfile($file);
exit;
?>
代码ob_end_clean()
基本运行,将抢占缓冲区中的所有内容,然后擦除缓冲区,并关闭输出缓冲。