以下代码可以很好地写入文件,但我不希望它在执行时提示用户下载。我想阻止这种情况。。。任何帮助都将不胜感激。我也在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);
不可能做到这一点(或者即使有一些技巧,你也不应该使用它!)。避免提示的唯一方法是更改浏览器设置,当然这可以由用户完成,而不是由您完成。
若有人能够在没有任何提示的情况下将文件保存在他的电脑上,那个么对用户来说是不安全的。
删除行
header('Content-Type: application/excel');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
它只会写入文件。
事实上,它似乎无论如何都没有输出任何内容。
您混淆了HTTP(特别是标头)和本地文件的工作方式。
浏览器解释HTTP响应的方式可以通过使用标头(内容类型、内容处置)来建议。操作系统和应用程序解释文件的方式与HTTP和HTTP头无关。
您的脚本基本上做两件事:
-
告诉浏览器(通过HTTP头)将响应解释为
application/excel
附件(触发下载并将责任传递给操作系统); -
在文件中写入一些内容。
您需要跳过步骤(1)。
此外,如果您不关心特殊情况下的性能,那么file_put_contents应该是enoguh。