在PHP中生成可下载的.CSV文件

在PHP中生成可下载的.CSV文件,php,html,mysql,csv,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

我在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文件,但是有完整的PHP代码index.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代码2…,/body,/html,。。。。如何解决这个问题?

您的问题是输出缓冲

因为您已经在生成和输出HTML代码,所以您的缓冲区已经有了输出,如果您清理并重新启动它,您的问题应该得到解决

您可以在开始时添加以下内容:

if (isset($_POST['submit_dCSV'])){
    ob_clean();
    ob_start();
    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";
}

清洁卫生;ob_启动@火影忍者,你能以答案的形式写出来吗?这对我的函数之前的代码的上半部分非常有效。但我函数后面的较低部分代码仍然存在。有什么想法吗?@Naruto-在safari的情况下,此代码不起作用,请帮助。