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框架Phpbean说明
Jan 10 PHP
php 设计模式之 单例模式
Dec 19 PHP
PHP 检查扩展库或函数是否可用的代码
Apr 06 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
PHP实现的简易版图片相似度比较
Jan 07 PHP
php修改上传图片尺寸的方法
Apr 14 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
PHP简单获取多个checkbox值的方法
Jun 13 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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中数据的批量导入(csv文件)
2006/10/09 PHP
来自PHP.NET的入门教程
2006/10/09 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
js左侧多级菜单动态的解决方案
2010/02/01 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
jQuery实现腾讯信用界面(自制刻度尺)样式
2017/08/15 jQuery
JavaScript中set与get方法用法示例
2018/08/15 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
Python字符编码与函数的基本使用方法
2017/09/30 Python
pandas 层次化索引的实现方法
2019/07/06 Python
Python笔记之facade模式
2019/11/20 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
基于Python爬取京东双十一商品价格曲线
2020/10/23 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
瑞士灯具购物网站:Lampenwelt.ch
2018/07/08 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
计算机个人求职信范例
2014/01/24 职场文书
出生公证书样本
2014/04/04 职场文书
老公给老婆的保证书
2014/04/28 职场文书
消防工作实施方案
2014/06/09 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
盗窃案辩护词
2015/05/21 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang