【问题标题】:How to execute generate CSV File in php?如何在 php 中执行生成 CSV 文件?
【发布时间】:2020-01-23 07:30:55
【问题描述】:

我想生成一个带有动态文件名的 csv 文件,该文件名来自我使用 ajax jquery 请求获得的值。这些值将用作我生成的 csv 文件的文件名。我的程序不生成 csv 文件。生成csv文件应该怎么做?

我是 php 的新手,尤其是 AJAX 和 Jquery,所以我仍然对 AJAX 请求的工作原理有些困惑。

我正在使用免费试用版的 Sublime IDE 和 localhost 的 php。程序通过警告框显示 csv 文件的内容,但不会生成 csv 文件。

这是我的 jquery ajax 请求文件:


 var selectedLanguage = $('#selectLanguage').val();
 var length;

 length = selectedLanguage.length;

 for (var i = 0; i < length; i++) 
    {
        var selectedLanguage = $('#selectLanguage').val();
        $.ajax({
            crossDomain: true,
            async: false,
            url: "downloadFile.php",
            type: "GET",
            data: {"seLang": selectedLanguage[i]},
                success: function(data) 
                { 
                    alert(data);
                    location.reload();
                }
        });

    }

这是我的 downloadFile.php 代码:

<?php
  $id="";

  if(isset($_GET['seLang'])){
   $id = $_GET['seLang'];

    $filename = "File_".$id.".csv"; 
    $f = fopen('php://memory', 'w');
    //set headers for column
    $fields = array('Content1', 'Content2', 'Content3','Content4');
    fputcsv($f, $fields, ',');

    fseek($f, 0);
    header('Content-Encoding: UTF-8');
    header('Content-type: text/csv; charset=UTF-8');
    header('Content-Disposition: attachment; filename="' . $filename . '";');
    fpassthru($f);


  }

  else
  {
    echo "<script type='text/javascript'>alert('Empty');</script>";

  }
?>

编辑 1: 感谢 Prvn 和 Sunday Johnson 提供的帮助。虽然,我发现了实际的问题。我从本网站的另一篇文章中读到,无法使用 AJAX 下载生成的 csv 文件。我还能做些什么来下载 csv 文件?

【问题讨论】:

    标签: javascript php jquery ajax csv


    【解决方案1】:

    关于 Ajax 代码的一条评论,你为什么要迭代值?

    关于php代码,改用这个:

    <?php
      $id="";
    
      if(isset($_GET['seLang'])){
          $id = $_GET['seLang'];
    
          $filename = "File_".$id.".csv"; 
          $f = fopen($filename, 'w');
          //set headers for column
          $fields = array('Content1', 'Content2', 'Content3','Content4');
          fputcsv($f, $fields, ',');
          fclose($f);
      }
    
      else
      {
        echo "<script type='text/javascript'>alert('Empty');</script>";
    
      }
    

    ?>

    【讨论】:

    • 感谢您回答我的问题。我正在迭代该值,因为这些值存储在一个数组中。这些值是来自多选选项的选定结果。能够检索它的值。
    • 好吧,有道理,我认为这是一个正常的字符串值。都一样,以上对你有用吗?
    • 我尝试实现您的解决方案,但不幸的是,我的代码仍然无法正常工作。感谢您的尝试。
    • 那你就得试试这个了。检查答案以获取更新。
    • 如果您有任何问题,请告诉我。
    【解决方案2】:
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="sample.csv"');
    
    $fields = array('Content1', 'Content2', 'Content3','Content4');
    $fp = fopen('php://output', 'wb');
    
    foreach ( $fields as $line ) {
        $val = explode(",", $line);
        fputcsv($fp, $val);
    }
    
    fclose($fp);
    
    
    

    输出

    【讨论】:

    • 您好,感谢您回答我的问题。请问内容还是列的表头可以吗?
    • Hello @charmjo 在此内容中是列而不是标题。谢谢
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2018-05-13
    相关资源
    最近更新 更多