我有一个PHP应用程序,它生成一组代码,将它们保存到MySQL DB,然后将其作为可下载的csv文件输出给用户。在代码块之后我还有一个echo语句将PHP数组转换为csv。在convert_to_csv函数调用之后的echo语句而不是输出到浏览器输出到文件而是覆盖第一行。如何将echo语句输出到浏览器?代码块如下:
convert_to_csv($newCodesArray,$fileName,',');
echo "Your file was successfully generated";
function convert_to_csv($input_array, $fileName, $delimiter)
{
header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=\"$fileName\"");
$f = fopen('php://output', 'w');
/* loop through array */
foreach ($input_array as $line) {
/* default php csv handler */
fputcsv($f, $line, $delimiter);
}
fclose($f) or die("Can't close php://output");
}
答案 0 :(得分:0)
您已将标头定义为text / csv。所以它不会在浏览器中打印,因为它需要text / html。
或者您可以执行以下操作。将您的函数复制到不同的文件(例如csv.php)。
<?php
echo "Your file was successfully generated <script> window.location = 'csv.php' </script>";
现在它将打印您的echo字符串并开始下载您的csv文件。
正如 Magnus Eriksson 所评论的那样,
上面的代码没有检查它是否真的成功生成。我们可以使用AJAX扩展代码。
<script>
$.ajax('csv.php', {
success: function(data) {
document.write('Your file was successfully generated.');
windows.location = 'csv.php';
},
error: function() {
document.write('Your file generation failed.');
}
});
</script>
注意: - AJAX调用会生成两次文件。