Php 尝试下载csv文件时出现错误\u无效\u响应?

Php 尝试下载csv文件时出现错误\u无效\u响应?,php,json,codeigniter,Php,Json,Codeigniter,当我尝试执行此代码时,我得到 错误\u无效\u响应 并且文件未下载 注意:此数组不大 这是什么原因 隐藏的_数据是输入隐藏的post数据: <?php echo form_open("system/downloadcsv",array('class' => 'downloadcsv')); ?> <input type="hidden" class="hidden_data" name="hidden_data" /> <button type="submit

当我尝试执行此代码时,我得到

错误\u无效\u响应 并且文件未下载

注意:此数组不大

这是什么原因

隐藏的_数据是输入隐藏的post数据:

<?php echo form_open("system/downloadcsv",array('class' => 'downloadcsv')); ?>
<input type="hidden" class="hidden_data" name="hidden_data" />
<button type="submit" name="download_csv" class="btn-u btn-u-blue exportsys" disabled="disabled" title="Notice: First run system!">Export</button>
<?php echo form_close(); ?>

出口

所以您要做的是从隐藏的数据字段中获取JSON数据。将其传递到后端。然后让他们将结果下载为CSV文件

首先。让我们谈谈标题。你不需要那么多。事实上,你实际上是在告诉浏览器去拉屎。如果您想让浏览器以CSV文件的形式接收请求,则需要以下两个标题

header('Content-Type: text/csv; charset=utf-8');
header("Content-Disposition: attachment; filename=$filename.csv");
此外,您还需要一个实际的ish CSV文件来下载。PHP用来处理这个问题,这很好,因为你也可以伪造一个

$output = fopen('php://output', 'w');
然后,您可以使用fputcsv将列放入任意位置

foreach($data as $datum) { fputcsv($output, $datum); }
最后。对代码进行一次漂亮的小清理可能会如下所示:

public function downloadcsv(){
  if(isset($_POST['hidden_data'])){

    $data = json_decode(
        str_replace('\', '', $_POST['hidden_data']);
    );

    $filename = $data[0]['System'] . date('Ymd') . ".csv";
    header('Content-Type: text/csv; charset=utf-8');
    header("Content-Disposition: attachment; filename=$filename");

    $output = fopen('php://output', 'w');

    $flag = false;
    foreach($data as $key=>$row) {
      if(!$flag) {
        fputcsv($output(implode(",", array_keys($row)));
        $flag = true;
      }
      array_walk($row, 'cleanData');
      fputcsv(implode(",", array_values($row)));
    }
  }
}
我希望这会对你有所帮助,让你走上正轨


任何其他文件类型也不起作用。你得到的
错误无效\u响应
在哪里?你发送两次
内容类型
标题,删除一个。@CharlotteDunois同样是当我删除文本/普通…@fusion3k无处不在时,这是一些Chrome崩溃,只写以下内容:此网页不可用错误无效\u响应请回答,我已经通过调用CodeIgniter之外的脚本解决了这个问题。可能是来自ci或wordpress的一些标题(因为我加载了wp load.php)导致了这种情况。
public function downloadcsv(){
  if(isset($_POST['hidden_data'])){

    $data = json_decode(
        str_replace('\', '', $_POST['hidden_data']);
    );

    $filename = $data[0]['System'] . date('Ymd') . ".csv";
    header('Content-Type: text/csv; charset=utf-8');
    header("Content-Disposition: attachment; filename=$filename");

    $output = fopen('php://output', 'w');

    $flag = false;
    foreach($data as $key=>$row) {
      if(!$flag) {
        fputcsv($output(implode(",", array_keys($row)));
        $flag = true;
      }
      array_walk($row, 'cleanData');
      fputcsv(implode(",", array_values($row)));
    }
  }
}