问题: 下载后,该文件不包含数据。 即它变得空白。
所以请帮助我。
<?php
session_start();
include_once 'oesdb.php';
$id=$_REQUEST['id'];
if(isset($_REQUEST['id']))
{
$sql=executeQuery("SELECT * FROM file where id=$id");
$rows = mysql_fetch_array($sql);
$file =$rows['file'];
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile('uploads/'.$file);
exit;
}
?>
答案 0 :(得分:2)
为什么不在uploads文件夹中创建HTACCESS文件,然后说明
Allow From 127.0.0.1
Deny From All
然后只需创建一个URL,使用HTML5的新下载功能,执行以下操作:
<a href="uploads/filenamehere.txt" download="filenamehere.txt">click to download</a>
它节省了尝试使用PHP制作下载脚本的时间。
答案 1 :(得分:0)
尝试替换它:
$file =$rows['file'];
由此:
$file = "uploads/".$rows['file'];
和此:
readfile('uploads/'.$file);
由此
readfile($file);
如果仍然不工作则放置readfile
函数返回的值
重要强>
请考虑sql注入问题(参见OndřejMirtes的评论)
答案 2 :(得分:0)
问题在于:
header('Content-Length: ' . filesize($file));
正如你告诉他的那样, Content-Length
收到零值,浏览器下载零长度文件。如果$file
是相对于upload/
的路径,则应执行以下操作:
header('Content-Length: ' . filesize('upload/'.$file));
请确保filezise()
返回正确的尺寸,并readfile()
真正输出它。
但另一个问题是您提到UPLOAD
文件夹并使用uploads
。它们不一样,案例很重要。另外,可能在'uploads/'.$file
中使用相对路径不是一个好主意,最好使用绝对路径。例如,'/var/www/upload/'.$file
。