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 相关文章推荐
珊瑚虫IP库浅析
Feb 15 PHP
PHP基础学习小结
Apr 17 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
php获取301跳转URL简单实例
Dec 16 PHP
ThinkPHP中自定义目录结构的设置方法
Aug 15 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
CI框架实现cookie登陆的方法详解
May 18 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 PHP
Laravel中获取IP的真实地理位置
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
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Fiddler如何抓取手机APP数据包
2016/01/22 Python
Python通过future处理并发问题
2017/10/17 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python创造虚拟环境方法总结
2019/03/04 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
.NET面试题:什么是反射
2016/09/30 面试题
财务方面个人工作的自我评价
2013/12/28 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
领导工作表现评语
2015/01/04 职场文书
小学五一劳动节活动总结
2015/02/09 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
动画《朋友游戏》公开佐藤友生绘制的开播纪念绘
2022/04/06 日漫