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 相关文章推荐
3.从实例开始
Oct 09 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
PHP与SQL注入攻击防范小技巧
Sep 16 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
Mar 28 PHP
PHP里的$_GET数组介绍
Mar 22 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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
Array.prototype.slice 使用扩展
2010/06/09 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
node.js 开发指南 ? Node.js 连接 MySQL 并进行数据库操作
2014/07/29 Javascript
js读写json文件实例代码
2014/10/21 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
canvas实现钟表效果
2017/02/13 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
JavaScript图像放大镜效果实现方法详解
2020/06/28 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
Python实现的个人所得税计算器示例
2018/06/01 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
行政专员岗位职责
2014/01/02 职场文书
党员干部承诺书范文
2014/03/25 职场文书
安全横幅标语
2014/06/09 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
创业计划书之酒吧
2019/12/02 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
压缩Redis里的字符串大对象操作
2021/06/23 Redis