php强制下载类型的实现代码

yipeiwu_com5年前PHP代码库
复制代码 代码如下:

function downloadFile($file){
/*Coded by Alessio Delmonti*/        
        $file_name = $file;
        $mime = 'application/force-download';
        header('Pragma: public');       // required
        header('Expires: 0');           // no cache
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Cache-Control: private',false);
        header('Content-Type: '.$mime);
        header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
        header('Content-Transfer-Encoding: binary');
        header('Connection: close');
        readfile($file_name);           // push it out
        exit();
}

php将文件下载下来而不是超链接下载,这样可以减少盗链的情况!将文件给浏览器让浏览器下载

以txt类型为例

由于现在的浏览器已经可以识别txt文档格式,如果只给txt文档做一个文字链接的话,点击后只是打开一个新窗口显示txt文件的内容,并不能实现点击下载的目的。当然这个问题的解决办法也可以是将txt文件改名为浏览器不认识的文件(比如rar),这样的话,由于浏览器不能识别rar类型的文件,只能让用户下载了。还有一种办法,就是利用代码通过header设置文档的格式来实现点击下载的目的。
PHP代码如下:
复制代码 代码如下:

$filename = '/path/'.$_GET['file'].'.txt'; //文件路径
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($filename));
readfile($filename);

简要说明:
第一个header函数设置Content-Type的值为application/force-download;
第二个header函数设置要下载的文件。注意这里的filename是不包含路径的文件名,filename的值将来就是点击下载后弹出对话框里面的文件名,如果带路径的话,弹出对话框的文件名就是未知的;
最后通过readfile函数,将文件流输出到浏览器,这样就实现了txt文件的下载。

相关文章

PHP 一个随机字符串生成代码

复制代码 代码如下: /************* *@l - length of random string */ function generate_rand($l){ $c= "A...

QueryPath PHP 中的jQuery

官方主页  http://querypath.org/ QP API 手册  http://api.querypath.org/docs/ QueryPath(QP...

php中判断数组相等的方法以及数组运算符介绍

php中判断数组相等的方法以及数组运算符介绍

如何判断两个数组相等呢?其实很简单,用 == 或者 === 就可以了 php手册里说明如下: 那像 array('k'=>array())这样的多维数组能用如上方法判断相等吗?当...

AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定

AspNetAjaxPager,Asp.Net通用无刷新Ajax分页控件,支持多样式多数据绑定

本控件可以对GridView,Repeater,DataGrid,DataList...几乎所有的.net数据绑定控件进行分页,全部无刷新,数据绑定部分可以使用存储过程也可以直接使用sq...

PHP基于反射机制实现插件的可插拔设计详解

本文实例讲述了PHP基于反射机制实现插件的可插拔设计。分享给大家供大家参考,具体如下: 说PHP和ASP等同的朋友们可以就此打住了,PHP支持反射,而且还是非常的强大。好了,我们开始今天...