我正在使用以下代码生成一个csv文件供下载。
/**@var array $results contains the results of an SQL query**/
$tmpFile = tmpfile(); //Create a temp file to write the csv to
fputcsv($tmpFile, array_keys($results[0])); //Write the column headers
foreach ($results as $result) { //write each row to the file
fputcsv($tmpFile, $result);
}
rewind($tmpFile); //Rewind the stream
$csv = stream_get_contents($tmpFile); //Get the file as text
fclose($tmpFile); //Done with the temp file.
//Set the download headers
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="testDownload.csv"');
//Output the content
echo $csv;
exit(0);
下载似乎正常启动,但一秒后我在firefox中收到消息,“[文件]无法保存,因为无法读取源文件。”我用chrome / safari进行了测试,得到了类似的结果。我还测试了一些静态内容(不是来自数据库)但没有成功。
在开发人员控制台中,我可以检查网络请求并看到它返回状态200,如果我检查响应,我会看到完整的文件。我甚至可以将其复制/粘贴到文本文件中,然后在excel中打开它。
此外,如果我注释掉header()
行,则文件内容会在浏览器中显示而不会出现问题。
内容只有~2500行,没有特殊字符。