php强制文件下载而非在浏览器打开的自定义函数分享


Posted in PHP onMay 08, 2014

有时我们希望如图片、文本文档、网页、mp3、pdf等内容,当点击对应链接时直接下载,而不是在网页上显示,那么就需要强制设置header头信息。以下为一段不会产生乱码的php函数实现代码,其他程序语言也可参考之编写实现。

/**
 * Downloader
 *
 * @param $archivo
 *  path al archivo
 * @param $downloadfilename
 *  (null|string) el nombre que queres usar para el archivo que se va a descargar.
 *  (si no lo especificas usa el nombre actual del archivo)
 *
 * @return file stream
 */
function download_file($archivo, $downloadfilename = null) {
    if (file_exists($archivo)) {
        $downloadfilename = $downloadfilename !== null ? $downloadfilename : basename($archivo);
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $downloadfilename);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($archivo));
        ob_clean();
        flush();
        readfile($archivo);
        exit;
    }
}
PHP 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
怎样使用php与jquery设置和读取cookies
Aug 08 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
php快速排序原理与实现方法分析
May 26 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP用continue跳过本次循环中剩余代码的注意点
Jun 27 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 #PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
May 08 #PHP
PHP中把stdClass Object转array的几个方法
May 08 #PHP
PHP批量检测并去除文件BOM头代码实例
May 08 #PHP
php代码审计比较有意思的例子
May 07 #PHP
一个php短网址的生成代码(仿微博短网址)
May 07 #PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 #PHP
You might like
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
Node.js中的process.nextTick使用实例
2015/06/25 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
Python操作MySQL简单实现方法
2015/01/26 Python
使用70行Python代码实现一个递归下降解析器的教程
2015/04/17 Python
django初始化数据库的实例
2018/05/27 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
自考生自我鉴定范文
2013/10/01 职场文书
高中政治教学反思
2014/01/18 职场文书
幼儿园家长寄语
2014/04/02 职场文书
销售团队获奖感言
2014/08/14 职场文书
课外小组活动总结
2014/08/27 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
2014年新教师工作总结
2014/11/08 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
爱护环境建议书
2015/09/14 职场文书
Go语言中break label与goto label的区别
2021/04/28 Golang