我有一个小脚本,它从DB读取数据,对它们进行排列并将它们保存为.txt文件。 最后,用户被重定向到该文件。 现在,如何在用户重定向时出现.txt文件下载框?
<?php
// Preden zacnemo, dobi novico iz baze!
$MOD_NEWS_SAVETXT_getnews = mysql_query("SELECT * FROM NEWS WHERE NEWSid = '{$_GET['id']}'") or die(mysql_error());
// Nardimo while in priredimo vsebino iz baze spremenljivkam!
while ($MOD_NEWS_SAVETXT_NEWSRESULT = mysql_fetch_array($MOD_NEWS_SAVETXT_getnews)) {
$MOD_NEWS_SAVETXT_FILE_name = $MOD_NEWS_SAVETXT_NEWSRESULT['NEWStitle'] . ".txt";
echo $MOD_NEWS_SAVETXT_FILE_name;
$MOD_NEWS_SAVETXT_FILE_handle = fopen($MOD_NEWS_SAVETXT_FILE_name, 'w') or die("Ne morem brati/ustvariti datoteke!");
fwrite($MOD_NEWS_SAVETXT_FILE_handle, $MOD_NEWS_SAVETXT_NEWSRESULT['NEWStext']);
fclose($MOD_NEWS_SAVETXT_FILE_handle);
header("Location: ./" . $MOD_NEWS_SAVETXT_FILE_name ."");
}
?>
答案 0 :(得分:6)
之前出现过:
答案 1 :(得分:5)
要强制下载文件,您必须发送HTTP标头,告知浏览器将该文件视为下载文件。这会覆盖文件的Content-Type。
http://en.wikipedia.org/wiki/List_of_HTTP_headers
基本上,当您的Web服务器检索浏览器请求的文件时,它首先检查文件扩展名并猜测mime类型。然后它创建HTTP响应,并插入Content-Type标头,其中包含它猜测的mime类型的值。
您可以让PHP显式设置文件的内容类型。
上面已经给出了这个例子。
header("Content-type: application/force-download");
或
header("Content-type: application/octet-stream");
对于下载,您还必须设置Content-Disposition和Content-Transfer-Encoding HTTP响应标头。
这些在MIME规范中定义:http://www.faqs.org/rfcs/rfc1521.html
定义内容长度也很好,因为这允许浏览器为用户提供下载进度条。
您可能还希望使用范围标题来允许部分请求。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html