使用标头输出到csv时回显屏幕

时间:2016-11-04 06:21:47

标签: php csv echo

我有一个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");

}

1 个答案:

答案 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调用会生成两次文件。