我正在使用PHP从Laravel的数据库条目中创建一个简单的。csv,这里有一个小示例代码:
$file = fopen(storage_path('file.csv'), 'w');
//$printer = array from database
foreach ($printer as $row) {
fputcsv($file, $row);
}
fclose($file);
//$formname = Object values
$headers = array(
'Content-Type: text/csv',
'Content-Length: ' . filesize(storage_path('file.csv')),
'Content-Disposition: attachment; filename="'.$formname->name.'.csv"'
);
return Response::download(storage_path('file.csv'), $formname->name.'.csv', $headers);
都很标准,对我来说工作很好,但我的客户端使用的是OS X 10.9.3 &Safari 7.0.4和每次下载都是一个。txt扩展名,我找不到一种方法来阻止它从服务器或客户端。(所以它下载为file.csv.txt)
我已经搜索了谷歌,但只能找到其他用户的问题-没有解决方案,上面的代码已经编辑使用建议找到Stackoverflow:1. Laravel在下载的文件中添加。txt2. 如何使用CSV mime类型?
谁能告诉我这个问题出现在哪里以及如何解决它?有没有什么地方我可以测试下载,因为我只有Windows,我使用的测试网站只提供视觉渲染。
另外:客户已经向我保证他可以从其他来源下载csv文件而不会出现这个问题
正如我所看到的,Symfony以键值对的形式遍历标头:
public function __construct(array $headers = array())
{
foreach ($headers as $key => $values) {
$this->set($key, $values);
}
}
然后这样设置它们:
if (true === $replace || !isset($this->headers[$key])) {
$this->headers[$key] = $values;
} else {
$this->headers[$key] = array_merge($this->headers[$key], $values);
}
因此,如果您在$headers
数组中只有带有数字索引的值,那么结果可能会出乎意料。试着这样修改你的代码:
$headers = array(
'Content-Type' => 'text/csv',
'Content-Length' => filesize(storage_path('file.csv')),
'Content-Disposition' => 'attachment; filename="'.$formname->name.'.csv"'
);