Silex和fputcsv问题

时间:2015-05-29 06:37:11

标签: javascript php jquery csv silex

我在尝试通过PHP和Silex创建可下载的CSV时遇到问题。

这就是我现在所拥有的

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=csv.csv');


$output = fopen('php://output', 'w');
fputcsv($output, array('Referrer', 'Occurrence'));

$list = array();

$html = "<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script><script type='text/javascript' src='sort/jquery.tablesorter.min.js'></script>"
        . "</script><script type='text/javascript' src='sort/jquery.tablesorter.js'></script>"
        . "<script>" . '$' . "(document).ready(function(){" . '$' . "('#myTable').tablesorter();});"
        . "" . '$' . "(document).ready(function(){" . '$' . "('#myTable').tablesorter({widthFixed: true, widgets: ['zebra']}).tablesorterPager({container: " . '$' . "('#pager')}); }); </script>"
        . "<style>table{margin: 0 auto; border-collapse: collapse;}tr{border: solid black 2px;background-color: #E6E6E6;}"
        . "td{border:solid black 2px;}tr:nth-child(odd){background-color: white;}"
        . "th{width:200px; height:50px; border: solid black 2px;background-color: #B2CCFF;}"
        . "#pager{margin : 0 auto ; text-align: center; padding: 20px;}</style>"
        . "<table id='myTable' class='tablesorter' style='text-align:center;'><thead><tr><th>Referrer</th><th>" . $range . "</th>" . $conv . "</tr></thead><tbody>";
$sql = "SELECT * FROM " . $choice . " WHERE referrer like '%" . $data['Referrer'] . "%' AND " . $range . " >= " . $data['Data_di_inizio'] . " AND " . $range . " <= " . $data['Data_di_fine'] . "";
$stmt = $conn->query($sql);

while ($row = $stmt->fetch()) {
    if ($data['Tipologia'] == 1) {
        $conv = "<td>" . $row['product_id'] . "</td>";
    }
    $html .= "<tr><td>" . $row['referrer'] . "</td><td>" . $row[$range] . "</td>" . $conv . "</tr>";
    array_push($list, array_values($row));
}

$html .= "</tbody></table><div id='pager' class='pager'><form>
    <i class='prev'>&lArr;</i>
<input type='text' class='pagedisplay'/>
<i class='next'>&rArr;</i>
<select class='pagesize'>
    <option value='10'>10 per page</option>
<option value='20'>20 per page</option>
<option value='30'>30 per page</option>
</select>
</form>
    </div>";

foreach ($list as $ferow) {
    fputcsv($output, $ferow);
}
fclose($output);


return $html;
}

在“While”循环期间,$ row显示没有问题,然后打印一个表,其中包含应该具有的所有正确值。

当我下载csv时,它起初也很好看。 表中的所有内容也都存在。但!最后,csv还包含:

<script type='text/javascript' src='http://code.jquery.com/jquery-1.8.2.min.js'></script><script type='text/javascript' src='sort/jquery.tablesorter.min.js'></script></script><script type='text/javascript' src='sort/jquery.tablesorter.js'></script><script>$(document).ready(function(){$('#myTable').tablesorter()    })  $(document).ready(function(){$('#myTable').tablesorter({widthFixed: true     widgets: ['zebra']}).tablesorterPager({container: $('#pager')})     })  </script><style>table{margin: 0 auto    border-collapse: collapse  }tr{border: solid black 2px background-color: #E6E6E6   }td{border:solid black 2px  }tr:nth-child(odd){background-color: white  }th{width:200px  height:50px     border: solid black 2px    background-color: #B2CCFF   }#pager{margin : 0 auto      text-align: center  padding: 20px  }</style><table id='myTable' class='tablesorter' style='text-align:center
        <i class='prev'>&lArr   </i>                                                                    
    <input type='text' class='pagedisplay'/>                                                                    
    <i class='next'>&rArr   </i>                                                                
    <select class='pagesize'>                                                                   
        <option value='10'>10 per page</option>                                                                     
    <option value='20'>20 per page</option>                                                                 
    <option value='30'>30 per page</option>                                                                 
    </select>                                                                   
    </form>                                                                 

它基本上在CSV内打印$ html变量中的所有内容。

我认为这可能与输出缓冲区有关,但我没有想法。有人有吗?

1 个答案:

答案 0 :(得分:0)

通过在exit();

之后添加fclose($output);来解决问题