【发布时间】:2014-01-28 01:42:25
【问题描述】:
我无法让浏览器提示下载。输出改为显示在屏幕上。我在这个网站上尝试了很多关于这个主题的其他主题,但无济于事。我可以将fopen("php://output","w") 更改为fopen("export.csv","w"),但这会在服务器上保存export.csv 文件的副本,这是我不想要的。我希望将文件下载到客户端而不将其保存在服务器上。这是我的代码:
$sql = mysql_query($_SESSION["export-query"]);
$fields = mysql_num_fields($sql);
$header = array();
for ($i = 0; $i < $fields; $i++) {
$header[] = mysql_field_name($sql, $i);
}
$f = fopen("php://output","w");
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export.csv');
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate');
fputcsv($f, $header);
while ($row = mysql_fetch_row($sql)) {
fputcsv($f, $row);
}
fclose($f);
请帮忙!非常感谢。
【问题讨论】:
-
我的代码和这个非常相似,那里没有带引号的字符串,它工作正常。
-
@spsc_tech 我也只是在检查我自己的一个有效的方法,发现它也没有被引用。
-
@spsc_tech - 你指的是哪个带引号的字符串?
-
不确定这是否适用,但 AJAX 函数正在调用上述导出到 csv 代码,并且 AJAX 返回 (xmlHttp.responseText) 设置为显示在元素中。这会覆盖上面 php 代码中设置的标头吗?哦,是的,是的,这是你的问题。已发送的标头无法发送。
标签: php mysql csv export-to-csv