php将csv写入文件返回空白文件

托马斯·布里特森

我有一些看起来像这样的 csv 数据:

$data = 'email,score
    [email protected],3
    [email protected],4';

当我尝试将此 csv 导出到这样的文件时:

    $response = new StreamedResponse();
    $response->setCallback(
        static function () use ($data): void {
            $fp = fopen('php://output', 'wb');
            file_put_contents('exportk.csv', $data);
            fclose($fp);
        }
    );

    $response->setStatusCode(200);
    $response->headers->set('Content-Type', 'text/csv; charset=utf-8');
    $response->headers->set('Content-Disposition', 'attachment; filename="export.csv"');

我得到一个空文件,我在这里做错了什么

詹姆斯·杨

来自 Symfony 文档:

https://symfony.com/doc/current/components/http_foundation.html#request

如果您只是在同一请求期间创建了该文件,则该文件可能会在没有任何内容的情况下发送。这可能是由于缓存的文件统计信息对于文件大小返回零。要解决此问题,请使用二进制文件的路径调用 clearstatcache(true, $file)。

如果这不能解决问题,请尝试以下操作:

use Symfony\Component\HttpFoundation\HeaderUtils;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;

$data = <<<END
email,score
[email protected],3
[email protected],4
END;

// Just write the file here to save to the file system if you want...

$response = new Response($data);

$disposition = HeaderUtils::makeDisposition(
    HeaderUtils::DISPOSITION_ATTACHMENT,
    'export.csv'
);

$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition', $disposition);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章