以下代码适用于写入文件,但我不希望它在执行时提示用户下载。我想防止这种情况......任何帮助都会有所体现。我也用fwrite尝试了同样的结果。
$file_name = 'orders'.date('Ymd').'csv';
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
$data = array(
'aaa,bbb,ccc,dddd',
'123,456,789',
'"aaa","bbb"'
);
$fp = fopen('php://output', 'w');
foreach ( $data as $line )
{
$val = explode(",", $line);
fputcsv($fp, $val);
}
fclose($fp);
答案 0 :(得分:2)
没有可能这样做(或者即使有一些技巧,你也永远不应该使用它!)。 避免提示的唯一方法是更改浏览器设置,这当然可以由用户完成,而不是由您完成。
如果有人能够在没有任何提示的情况下将文件保存在他的计算机上,对用户来说是不安全的。
答案 1 :(得分:1)
删除行
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
它只会写文件。
实际上,它似乎没有输出任何内容。
答案 2 :(得分:1)
您正在混淆HTTP(特定标头)的工作方式和本地文件。
浏览器解释HTTP响应的方式可以通过使用标头(content-type,content-disposition)来建议。 操作系统和应用程序解释文件的方式与HTTP和HTTP标头无关。
你的脚本基本上做了两件事:
告诉浏览器(通过HTTP标头)将响应解释为application/excel
附件(触发下载并将责任传递给操作系统);
将一些内容写入文件。
您需要跳过步骤(1)。
此外,如果您不关心特殊情况下的表现,file_put_contents应该是enoguh。