php在不提示下载的情况下写入文件


php write to file without prompting for download

以下代码可以很好地写入文件,但我不希望它在执行时提示用户下载。我想阻止这种情况。。。任何帮助都将不胜感激。我也在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头无关。

您的脚本基本上做两件事:

  1. 告诉浏览器(通过HTTP头)将响应解释为application/excel附件(触发下载并将责任传递给操作系统);

  2. 在文件中写入一些内容。

您需要跳过步骤(1)。

此外,如果您不关心特殊情况下的性能,那么file_put_contents应该是enoguh。

相关文章: