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 文件类型判断代码
Mar 13 PHP
PHP 可阅读随机字符串代码
May 26 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
php银联网页支付实现方法
Mar 04 PHP
php对象和数组相互转换的方法
May 12 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php限制文件下载速度的代码
Oct 20 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 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
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
微信小程序 封装http请求实例详解
2017/01/16 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Vue实现剪贴板复制功能
2019/12/31 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
讲解Python中if语句的嵌套用法
2015/05/14 Python
Python中super关键字用法实例分析
2015/05/28 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
Python使用sqlalchemy模块连接数据库操作示例
2019/03/13 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
自荐信的基本格式
2014/02/22 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
2014年三万活动总结
2014/04/26 职场文书
十周年庆典策划方案
2014/06/03 职场文书
市场营销工作计划书
2014/09/15 职场文书
总结Python变量的相关知识
2021/06/28 Python
mysql脏页是什么
2021/07/26 MySQL
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android