使用PHP

时间:2015-09-11 13:33:06

标签: php html mysql csv

我在使用PHP生成可下载的.CSV文件时遇到问题。在我的页面(index.php)中,我有一个自称的表单。在同一页面上,我还包括php文件(csvHandler.php),它检查表单是否已提交,然后生成CSV文件。这很好用。但问题是,当我添加标题(自动下载文件)时,它会将整个PHP代码添加到该CSV文件中。知道如何解决这个问题吗?

这是csvHandler.php的代码:

if (isset($_POST['submit_dCSV'])){
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="export.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');
    $message = "";
    $institutions = explode_institutions();
    $fp = fopen('php://output', 'w');
    foreach ($institutions as $inst){
        fputcsv($fp, $inst);        
    }
    echo "Export successful";
}

当我运行此代码时,它会下载一个CSV文件,但是有完整的index.php PHP代码。有什么想法吗?

(编辑)的 的index.php:

<html>
 <head>title</head>
 <body>
  ...html code 1...

  <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
   <button type="submit" name="submit_dCSV" value="submit"></button>
  </form>

  <? include "csvHandler.php"; ?>

  ...html code 2...
 </body>
</html>

如果我将ob_clean()和ob_start()放在csvHandler.php的开头,它会生成具有正确数据的csv文件,但它会添加以下所有代码(... html code 2 ...,/ body,/ HTML,...)。如何解决?

1 个答案:

答案 0 :(得分:2)

你的问题是你的输出缓冲......

因为你已经制作并输出HTML代码,你的缓冲区有输出,如果你清理它,并且(重新)启动它,你的问题就应该解决了。

您可以在此全部开头添加ob_clean()ob_start()

 java.lang.Object
    java.awt.Component
        java.awt.Container
            javax.swing.JComponent
                javax.swing.JPopupMenu