创建csv文件不能与右键单击“另存为”一起使用

时间:2008-11-06 19:20:02

标签: php

我有一个生成csv格式数据的脚本,该脚本与一组标题一起发送给用户,这些标题告诉浏览器它是.csv文件。当用户(左)单击脚本链接时,一切都很有效,它们会显示一个文件名以.csv结尾的下载对话框,并建议使用excel或calc来打开它。但是,当用户右键单击并选择“另存为”时,将使用php脚本名称保存。

以下是标题代码:

header("Pragma: public");
header("Expires: 0"); // set expiration time

header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");

$val = date("m_d_Y_g_i");
Header('Content-Disposition: attachment; filename="personal_information_'.$val.'.csv"'); 

再次,当用户左键单击时,它将文件保存为personal_information_date.csv;当他们右键单击它时保存为download.php。我正在使用FF3。奇怪的是,IE7没有这个问题。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

使用mod_rewrite将文件从file.csv别名为file.php,这是一个浏览器问题,而不是PHP,因为通过保存文件,它在保存之前没有运行它。

总结一下:

  1. 指向personal_information_date.csv
  2. 的链接
  3. 创建mod_rewrite规则,将personal_information_date.csv转发给download.php(例如:RewriteRule ^personal_information_date.csv$ download.php)。

答案 1 :(得分:1)

HTTP客户端可能会忽略多个内容类型标头,另外两个将被忽略 - 其中哪一个?取决于浏览器实现,因此有不同的行为。正确的mime类型是text / csv,而不是application / octet-stream!内容处置标题对于下载是正确的。

答案 2 :(得分:0)

  • 我认为设置三种不同的mimetypes无济于事
  • 什么是$ val?是否已提供此已知内容或用户 - 例如它可能包含令人讨厌的字符(如“)”甚至是换行符,例如引入新的HTTP标题行吗?
  • 查看到达客户端的HTTP-Header。 Firefox内置信息或使用LiveHttpHeaders(在Mozilla网站上找到插件 - 记录所有HTTP-Headers) - 我确信还有更多/其他插件用于FF。

希望这有帮助。