强制用户下载.txt(php,file.txt)

时间:2009-08-06 13:46:43

标签: php file

我有一个小脚本,它从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 ."");
}
?>

2 个答案:

答案 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