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 相关文章推荐
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
php中使用Akismet防止垃圾评论的代码
Jun 10 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
PHP中register_globals参数为OFF和ON的区别(register_globals 使用详解)
Feb 05 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
php中opendir函数用法实例
Nov 15 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php PDO实现的事务回滚示例
Mar 23 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
Sep 01 PHP
深入理解PHP+Mysql分布式事务与解决方案
Dec 03 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
Oracle 常见问题解答
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
深入探密Javascript数组方法
2015/01/08 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
Python 第一步 hello world
2009/09/25 Python
python开发之list操作实例分析
2016/02/22 Python
使用python实现生成用户信息
2017/03/20 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
英国最专业的健身器材供应商之一:Best Gym Equipment
2017/12/22 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
2014年大学生党课心得体会范文
2014/03/29 职场文书
高中生家长寄语大全
2014/04/03 职场文书
技术经济专业求职信
2014/09/03 职场文书
领导班子作风建设剖析材料
2014/10/11 职场文书
看雷锋电影观后感
2015/06/10 职场文书
教师节班会主持词
2015/07/06 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang