代码用于下载excel文件(.xls)

时间:2013-02-16 18:28:44

标签: php

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

所以请帮助我。

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

     }
?>

3 个答案:

答案 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