使用 fputcsv 导出数据不会下载


Exporting data using fputcsv won't download

我在尝试导出数据和下载CSV时遇到了一个非常奇怪的问题。

问题是一旦我点击大约 30 行,浏览器就会决定显示数据而不是下载到文档。起初我以为是数据,但在故障排除期间,我通过导入同一文档进行了测试。

导入一次,我的下载就会触发并完美运行。 再次导入它并复制数据,突然间它显示它而不是下载它。

这不是一个大文件,但是我可以设置某种大小或字符限制吗? 我已经尝试了几种故障排除方法,但不确定该去哪里,因为它在一定限制之前有效。

    $group = "";
    ob_start();
    $group = fopen('php://output', 'w');
    fputcsv($group, array_keys(rest($groups[0])));
    foreach ($groups as $result) {
        fputcsv($group, $result);
    }
    fclose($group);
    return ob_get_clean();
    $response = $this->getResponse();
    $headers = $response->getHeaders();
    $headers->addHeaderLine('Content-Type', 'application/download');
    $headers->addHeaderLine('Content-Type', 'text/csv');
    $headers->addHeaderLine('Content-Disposition', "attachment; filename='"my_filen.csv'"");
    $headers->addHeaderLine('Accept-Ranges', 'bytes');
    $headers->addHeaderLine('Content-Length', strlen((string)$group));
    return $response;

如果它有帮助,我正在运行 Zend 框架 2。

我认为这可能与php.ini或gzip编码中的刷新设置有关。

您可以改为将其写入文本文件,然后强制下载该文件。

<?php
    $handle = fopen("somefile.txt", "w");
    fwrite($handle, "your content here");
    fclose($handle);
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename('somefile.txt'));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize('somefile.txt'));
    readfile('somefile.txt');
    exit;
?>

或者,如果您可以在服务器中使用它:

$content = file_get_contents ($filename);
header ('Content-Type: application/octet-stream');
echo $content;