php---header函数的文本文件下载

所谓实现文本文件的下载就是说当咱们点击一个文本文件的连接的时候不是打开这个文件,而是弹出一个下载对话框让咱们下载php

这就是今天讨论的主要问题。PHP帮助文档里面关于PHP经过header触发下载的说明比较简单,而网上关于此方面的文章也少的可怜,有不少文章都没法实现所须要的效果。今天我也来谈一下这个方面的话题,若是你感受比网上的某些文章有所改进,那我就很满足了。 

app

若是从准确的角度来讲,那PHP文档是最准确的,由于它很简练的列出了实现文本类文件触发下载所须要的三条语句,以PDF为例就是: 函数

// We'll be outputting a PDF 
header('Content-type: application/pdf'); 
// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
// The PDF source is in original.pdf 
readfile('original.pdf');

这三句是正确的,可是在真正用的过程当中很容易出现一些没法预料的问题,若是你是一个很仔细的人的话,也能够很容易的避免这些问题。而我不是,因此我就遇到了这样的问题,这里就以个人问题来简单说一下。 

对于第一句,应该没啥说的,是必须的,只要改一下文档的类型就行,例如是下载txt文件,那就改成header(‘Content-type: application/txt');,第二句也没啥说的,就是为你的下载文档起一个名字,若是是txt文件的话,能够改成header(‘Content-Disposition: attachment; filename=”downloaded.txt”‘);,第三句的问题就比较多了,readfile这个函数的意思就是读取一个文件而后输出,这里文件的路径须要是真实的文件路径,若是是downloads文件夹下面的一个original.txt文件,能够这样写readfile(‘downloads/original.txt');,而若是提交的页面会输出文本等字符,那么下载到的文件会是原文件original.txt和提交的页面输出的文字的混合文件。我在这里就缺乏了仔细的观察,一看下面不对就当即去查代码了,而没发现上面的文本就是我须要的内容,发现了这部份内容,你可能就很快想到怎么来解决这个问题了,也就是关闭提交到的页面的文本内容的输出。 

到这里,咱们的问题就解决了,从而也就实现了文本文件连接被点击的时候会触发下载对话框的效果。spa

代码以下:注意红色部分code

$filename = '路径+实际文件名';
//文件的类型
header('Content-type: application/pdf');
//下载显示的名字
header('Content-Disposition: attachment; filename="保存时的文件名.pdf"');
readfile("$filename");
exit();

下面是网上经常使用的方法 文档

if (isset($link)) 
{ 
Header("HTTP/1.1 303 See Other"); 
Header("Location: $link"); 
exit; 
}

$link就是文件的实际路径。  it