PHP显示“打开/保存”对话框

时间:2013-09-20 11:17:32

标签: php excel file csv savefiledialog

我正在使用PHP通过CSV生成Excel文件。在使用我自己的数据填充之前,我正在使用一段非常简单的代码来准备整个函数:

$list = array (
  array('#', 'Registrar', 'Country', 'Website', 'Email Address'),
  array('123', '456', '789', 'aaa', 'bbb'),
  array('123', '456', '789', 'aaa', 'bbb'),
);

$fp = fopen('myfile.xls', 'w');

foreach ($list as $fields) {
  fputcsv($fp, $fields, "\t", '"');
}

fclose($fp);

代码工作正常。但是,它会自动将“myfile.xls”保存到执行PHP文件的目录中。我希望页面显示“打开/保存”对话框,让用户选择他/她想要保存文件的位置。我尝试了一些这样的标题技巧:

header ("Content-Type: application/download");
header ("Content-Disposition: attachment; filename=myfile.xls");
header("Content-Length: " . filesize(myfile.xls));

然而,当使用它时,导出的文件显示页面内容(包括带有标题,菜单,页脚等的标题)而不是“list”变量中的数据...我可以' t阻止页眉和页脚包含在PHP页面中,因为它是框架的一部分,所以我只想选择存储通过PHP的CSV函数生成的“myfile.xls”的位置。

我也考虑并尝试过使用PHPExcel和其他用于生成Excel的软件包,但是我无法让它们正常工作。我已经失去了太多天尝试它,所以我决定只创建一个CSV文件,这对我来说是可以的。我现在唯一需要的是“打开/保存”对话框,这对我来说非常完美。

提前感谢您的时间和精力! :)

1 个答案:

答案 0 :(得分:0)

尝试以下代码

$file = "location of file to download"
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();