我试图将我的数组导出为CSV文件。我已经阅读了this个问题,现在我可以下载CSV了。问题是,CSV文件中还包含整个html文档,我不知道它来自哪里。
数组如下所示:
Array
(
[0] => Array
(
[id] => 1
[tphInventoryNumber] => D17001
[title] => Assets in Leasing
[price] => 1299.95
[recievedDate] => 2017-11-02
[departement] => 1
[unit] => 1
)
[1] => Array
(
[id] => 2
[tphInventoryNumber] => D17002
[title] => Assets in Leasing
[price] => 12.05
[recievedDate] => 2017-10-31
[departement] => 7
[unit] => 3
)
)
我导出CSV的功能如下所示:
function exportToCSV($array, $filename = "export.csv", $delimiter = ";"){
header('Content-Type: application/csv; charset=UTF-8');
header('Content-Disposition: attachment;filename="'.$filename.'";');
$f = fopen('php://output', 'w');
foreach ($array as $line) {
fputcsv($f, $line, $delimiter);
}
}
知道我在这里做错了什么吗?我无法找到解决此问题的任何方法......
更新
我通过发送帖子变量的按钮调用该函数。
形式:
<form action="start.php?load=export" method="post">
<input type="hidden" name="exportCSV" value="exportCSV">
<button class="btn btn-info" type="submit">CSV Export</button>
</form>
检查后置变量:
if (isset($_POST['exportCSV'])) {
exportToCSV($arrayCSV);
}
更新2
这是CSV的实际内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>TEST IPA</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="start.php?load=inventory">
<img height="25" alt="Brand" src="img/logo_tph.png"/>
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<ul class="nav navbar-nav">
<li><p class="navbar-text"><b>Test Inventar IPA</b></p></li>
<!--<li class="active"> <a href="start.php?load=inventory">Start</a></li>-->
<!--<li class=""><a href='assets.php?action=add'>Neu</a></li>-->
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">ipa2 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="logout.php">Logout</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div role="navigation" class="options-bar">
<ul class="nav nav-tabs">
<li role="presentation" class=""><a href="start.php?load=inventory">Inventar</a></li>
<li role="presentation" class=""><a href="start.php?load=createnew">Neu Erfassen</a></li>
<li role="presentation" class="active"><a href="start.php?load=export">Export</a></li>
<li role="presentation" class=""><a href="start.php?load=lists">Listen</a></li>
</ul>
</nav>
<div class="container-fluid wrapper-content">
1;D17001;"Assets in Leasing";1299.95;2017-11-02;1;1
2;D17002;"Assets in Leasing";12.05;2017-10-31;7;3
答案 0 :(得分:2)
我只能假设您的框架导致控制器操作输出视图或类似内容。您需要在函数末尾添加exit;
或die;
。例如:
function exportToCSV($array, $filename = "export.csv", $delimiter = ";") {
header('Content-Type: application/csv; charset=UTF-8');
header('Content-Disposition: attachment;filename="'.$filename.'";');
$f = fopen('php://output', 'w');
foreach ($array as $line) {
fputcsv($f, $line, $delimiter);
}
// halt execution of the script after output stream finalised
exit;
}
更新:您似乎已将某些html输出写入输出缓冲区,因此您需要先使用ob_end_clean();
清除它。见下面的例子:
function exportToCSV($array, $filename = "export.csv", $delimiter = ";") {
header('Content-Type: application/csv; charset=UTF-8');
header('Content-Disposition: attachment;filename="'.$filename.'";');
// clean output buffer
ob_end_clean();
$f = fopen('php://output', 'w');
foreach ($array as $line) {
fputcsv($f, $line, $delimiter);
}
// halt execution of the script after output stream finalised
exit;
}
答案 1 :(得分:0)
将您的函数调用更改为此。
if (isset($_POST['exportCSV'])) {
exportToCSV($arrayCSV);
die;
}