这就是我正在尝试做的事情。我有一系列报告,他们也希望能够以逗号分隔的文本文件形式下载。我读过很多页面,人们说只是回显结果而不是创建文件,但是当我尝试它时,它只是输出到他们所在的页面。
我在每份报告中都有这个
Export File<input type="checkbox" name="export" value="1" />
因此,在帖子中我可以检查他们是否正在尝试导出文件。如果他们是我正在尝试这样做:
if($_POST['export'] == '1')
{
$filename = date("Instructors by DOB - ".$month) . '.txt';
$content = "";
# Titlte of the CSV
$content = "Name,Address,City,State,Zip,DOB\n";
for($i=0;$i<count($instructors);$i++)
$content .= ""; //fill content
fwrite($filename, $content);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
readfile($filename);
}
基本上页面刷新了,但是没有文件推送下载。谁能指出我缺少什么?
EDIT我想我还没有完全说清楚。这不是在仅创建和下载文件的页面上,而是在还显示报告的页面上。所以当我输入 exit(); 时读取文件后,页面的其余部分加载为空白。我还需要在此页面上显示报告。我认为这也可能与为什么不下载有关,因为该页面已经发送了标头信息。
在要求您尝试关闭文件之前,我忽略了您写出内容的方式。
在这里查看 fwrite 手册:http://php.net/manual/en/function.fwrite.php http://php.net/manual/en/function.fwrite.php
你需要做的是:
$filename = "yourfile.txt";
#...
$f = fopen($filename, 'w');
fwrite($f, $content);
fclose($f);
关闭文件后,您现在可以安全地将其发送以供下载。
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
readfile($filename);
有几件事:
- 您确实不需要将内容类型设置为
application/octet-stream
。为什么不设置一个更真实的类型作为text/plain
?
- 我真的不明白你想如何使用日期功能。请参阅此处的手册:http://php.net/manual/en/function.date.php http://php.net/manual/en/function.date.php
- 正如 @nickb 正确指出的那样,您必须在执行以下操作后退出脚本
readfile(..)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)