将数组导出到csv将整个html文档导出到csv中

时间:2017-11-02 15:15:48

标签: php export-to-csv

我试图将我的数组导出为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

2 个答案:

答案 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;
}
相关问题