我在使用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,...)。如何解决?
答案 0 :(得分:2)
你的问题是你的输出缓冲......
因为你已经制作并输出HTML代码,你的缓冲区有输出,如果你清理它,并且(重新)启动它,你的问题就应该解决了。
您可以在此全部开头添加ob_clean()和ob_start():
java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPopupMenu