php写入文件而不提示下载

时间:2013-12-05 08:04:28

标签: php file

以下代码适用于写入文件,但我不希望它在执行时提示用户下载。我想防止这种情况......任何帮助都会有所体现。我也用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);

3 个答案:

答案 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标头无关。

你的脚本基本上做了两件事:

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

  2. 将一些内容写入文件。

  3. 您需要跳过步骤(1)。

    此外,如果您不关心特殊情况下的表现,file_put_contents应该是enoguh。