4

问题:下载后,文件不包含数据。即它变成空白。

所以请帮助我。

<?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;

     }
?>
4

3 回答 3

2

为什么不在上传文件夹中创建一个 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 制作下载脚本的时间。

于 2013-02-16T19:36:00.163 回答
0

尝试替换这个:

$file =$rows['file'];

这样:

$file = "uploads/".$rows['file'];

和这个:

readfile('uploads/'.$file);

这样

readfile($file);

如果仍然无法正常工作,则将函数返回的readfile

重要的

请考虑 sql 注入问题(参见 Ondřej Mirtes 的评论)

于 2013-02-16T18:40:36.290 回答
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

于 2013-02-16T19:53:51.357 回答