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输出Excel文件类
Feb 08 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
php define的第二个参数使用方法
Nov 04 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
php中get_object_vars()方法用法实例
Feb 08 PHP
php自动给网址加上链接的方法
Jun 02 PHP
PHP之密码加密的几种方式
Jul 29 PHP
PHP+ajax分页实例简析
Dec 07 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php使用环形链表解决约瑟夫问题完整示例
Aug 07 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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
海贼王:最美的悬赏令!
2020/03/02 日漫
一个php作的文本留言本的例子(五)
2006/10/09 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
配置php.ini实现PHP文件上传功能
2014/11/27 PHP
php实现paypal 授权登录
2015/05/28 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP实现的折半查找算法示例
2017/12/19 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
python日志记录模块实例及改进
2017/02/12 Python
python 内置函数filter
2017/06/01 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Django中URL的参数传递的实现
2019/08/04 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
animation和transition的区别
2020/10/12 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
实习自我鉴定
2013/12/15 职场文书
20年同学聚会感言
2014/02/03 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
个人委托函范文
2015/01/29 职场文书
六一晚会主持词开场白
2015/05/28 职场文书