PHP通过header实现文本文件下载的代码


Posted in PHP onAugust 08, 2010

这就是今天讨论的主要问题。PHP帮助文档里面关于PHP通过header触发下载的说明比较简单,而网上关于此方面的文章也少的可怜,有很多文章都无法实现所需要的效果。今天我也来谈一下这个方面的话题,如果你感觉比网上的某些文章有所改进,那我就很知足了。

如果从准确的角度来说,那PHP文档是最准确的,因为它很简练的列出了实现文本类文件触发下载所需要的三条语句,以PDF为例就是:

// We'll be outputting a PDF 
header('Content-type: application/pdf'); 
// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
// The PDF source is in original.pdf 
readfile('original.pdf');

这三句是正确的,但是在真正用的过程中很容易出现一些无法预料的问题,如果你是一个很仔细的人的话,也可以很容易的避免这些问题。而我不是,所以我就遇到了这样的问题,这里就以我的问题来简单说一下。

对于第一句,应该没啥说的,是必须的,只要改一下文档的类型就行,例如是下载txt文件,那就改为header(‘Content-type: application/txt');,第二句也没啥说的,就是为你的下载文档起一个名字,如果是txt文件的话,可以改为header(‘Content-Disposition: attachment; filename=”downloaded.txt”‘);,第三句的问题就比较多了,readfile这个函数的意思就是读取一个文件然后输出,这里文件的路径需要是真实的文件路径,如果是downloads文件夹下面的一个original.txt文件,可以这样写readfile(‘downloads/original.txt');,而如果提交的页面会输出文本等字符,那么下载到的文件会是原文件original.txt和提交的页面输出的文字的混合文件。我在这里就缺少了仔细的观察,一看下面不对就立即去查代码了,而没发现上面的文本就是我需要的内容,发现了这部分内容,你可能就很快想到怎么来解决这个问题了,也就是关闭提交到的页面的文本内容的输出。

到这里,我们的问题就解决了,从而也就实现了文本文件链接被点击的时候会触发下载对话框的效果。

PHP 相关文章推荐
Php注入点构造代码
Jun 14 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
php curl_init函数用法
Jan 31 PHP
php实现两个数组相加的方法
Feb 17 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
php下保存远程图片到本地的办法
Aug 08 #PHP
用PHP实现递归循环每一个目录
Aug 08 #PHP
为IP查询添加GOOGLE地图功能的代码
Aug 08 #PHP
PHP下对数组进行排序的函数
Aug 08 #PHP
PHP 冒泡排序算法的实现代码
Aug 08 #PHP
php下关于Cannot use a scalar value as an array的解决办法
Aug 08 #PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 #PHP
You might like
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
php微信公众平台开发类实例
2015/04/01 PHP
PHP将URL转换成短网址的算法分享
2016/09/13 PHP
Jquery常用技巧收集整理篇
2010/11/14 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
jquery中的过滤操作详细解析
2013/12/02 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
JS实现拖拽的方法分析
2016/12/20 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
vue指令只能输入正数并且只能输入一个小数点的方法
2018/06/08 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
vue3.0 自适应不同分辨率电脑的操作
2021/02/06 Vue.js
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python2.x与3​​.x版本有哪些区别
2020/07/09 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
2014/07/27 面试题
诉讼代理人授权委托书
2014/10/11 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
培训通知书模板
2015/04/17 职场文书
班级班风口号大全
2015/12/25 职场文书
MySQL数据库之存储过程 procedure
2022/06/16 MySQL