我正在使用Laravel,并试图将数据库中的项目导出到CSV文件。我已经很接近了。不幸的是,我在下载的文件中得到了Process id #xxx
的输出。
这是我使用的代码的一个更小的匿名示例。
public function exportCSV(): StreamedResponse
{
$keys = ['id', 'title'];
$posts = Post::select($keys)->get();
$stream = fopen('php://memory', 'w+');
fputs($stream, "sep=,\n"); // Excel will be nice
fputcsv($stream, $keys);
foreach ($posts->toArray() as $post) fputcsv($stream, $post);
rewind($stream);
// dd(stream_get_contents($stream)) gives the expected result here
return response()->streamDownload(function () use ($stream) {
echo $stream;
}, 'export.csv');
}
1条答案
按热度按时间djmepvbi1#
这是因为在$stream变量中,它只是一个句柄。要从句柄读取数据,需要使用fread函数。
循环是必要的,因为您必须定义要读取的字节数。当到达文件末尾时,fread返回false。
有关更多信息,请参阅PHP文档:https://www.php.net/manual/de/function.fread.php