php的header()函数前有echo输出情况分析
php的header()方法一般被用来告知浏览器做一些什么样的操作,比如跳转,刷新等等;而调用header方法前,如果使用echo输出一些内容,会发生什么情况呢?会对header函数有影响吗?我们实验来看看情况。
第一部分: 选择环境和版本
我们的测试选择的是LNNP,php的版本是5.3.8,相对较老的版本
第二部分:测试用例
<?php$str = "qwertyuiopasdfghjklzxcvbnm1234567890~!@#$%^&*()_+";$time = 10; for ($i = 0; $i < $time; $i ++){$x = rand(0, 40);$v = substr($str, $x, 1);echo $v; }header('Refresh:3, http://www.baidu.com');
解释一下这个测试用例,
1、$time变量用来控制echo输出字符的大小
2、为什么用for循环输出乱序的字符?原因从第三部分抓包的情况可以看到,浏览器端一般要求response内容部分进行gzip压缩。而这个压缩实际上是php做的,为排除gzip压缩对实验影响,所以用for循环做乱序输出
第三部分:抓包分析
1、正常情况,$time变量比较小的情况下
1) 浏览器发送请求给Nginx
2) nginx将请求包装后发送给php-fpm
3) php-fpm将结果回传nginx
4) nginx将结果回传浏览器
2、异常情况,$time变量较大的情况下
我们看1中第三步,php-fpm将结果回传nginx,我们发现两点
1) 无法实现跳转。 从抓包的情况是php无法修改输出header头的信息,其原因应该是header信息,已经被write到socket fd中,缓存池中不存在header信息,所以无法修改
2) echo输出的内容无影响。
第四部分:分析和结论
结合上面的情况,从第三部分的第一点,我们实际上可以看出,header函数的实现,实际上是把header函数的参数,作为字符串加到输出的返回内容 的header头部分,而在echo内容较大的时候,header头的字符串就无法输出了。
我们可以看出php的处理过程 echo 的内容都会被放到缓存池内,当缓存池满的时候, 会将缓存池的内容write到socket fd内,一旦write进去,header函数将无法再把header字符串写到返回请求的header头部分。所以这种情况下,header函数将失效。
转载于:https://www.cnblogs.com/yimuren/p/4195737.html
php的header()函数前有echo输出情况分析相关推荐
- PHP中header和session_start前不能有输出的原因
在http传输文本中,规定必须 header和content顺序必须是:header在前content在后,并且header的格式必须满足"keyword: value\n"这种格 ...
- PHP中Header函数和PHP_AUTH_USER做用户验证
php Header PHP_AUTH_USER PHP_AUTH_PW 用户验证 在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能.具体用法: Header( ...
- header函数解析
一.header函数 按照官方文档的说法,header函数用来输出http头部信息,你可以有下面的这些用法: 1.使用header函数进行跳转页面: header('Location:'.$url); ...
- php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证及缺点
在php中,可以使用Header函数做一些有趣的事情,用户验证就是其中一个很有意思的功能.具体用法: Header("WWW-Authenticate: Basic realm=" ...
- PHP中header函数的用法及其注意重点是什么呢
1.使用header函数进行跳转页面: header('Location:'.$url); 其中$url就是将要跳转的url了. 这种用法的注意事项有以下几点: •Location和":&q ...
- php header函数的详解,php header函数的详解_PHP教程
header函数在php中是发前一些头部信息的,如果我们可以直接使用它来做301跳转等,下面我来总结关于header函数用法与一些常用见问题解决方法. 发送一个原始 HTTP 标头[Http Head ...
- PHP:header()函数
1. header() 函数向客户端发送原始的 HTTP 报头. 认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数(在 PHP 4 以及更高的版本中,您可以使用输出缓存来 ...
- php输出英文时间日期格式,PHP使用函数gmstrftime、gmdate输出英文时间日期的安全方法(RFC 1123格式)...
PHP使用函数gmstrftime.gmdate输出英文时间日期的安全方法(RFC 1123格式) 分类:PHP_Python| 发布:佚名| 查看: | 发表时间:2014/8/6 最近项目中要为一 ...
- Linux之shell编程篇-----Shell 函数和Shell 输入/输出重定向
最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! Shell 函数 1. 自定义函数 linux she ...
最新文章
- 一年只有0.001「薇」!杜克大学陈怡然教授自嘲「科学家不如带货」
- 9 HTML5之表单
- 统计插件_CG Teamwork统计提交量插件制作思路
- MC34063组成DC-DC电路
- .NET MYSQL数据库操作基类( C#源码)
- linux修改py内容,python中修改文件行内容
- Excel如何删除表格中的空白列
- JTAG IEEE 1194.1笔记
- 2021年广东省安全员A证第三批(主要负责人)考试内容及广东省安全员A证第三批(主要负责人)免费试题
- 应对微软黑屏的解决办法
- python连接数据库mysql失败_python连接mysql失败怎么解决
- 失眠的岁月,我们都交了哪些科技智商税?
- 豪江智能更新招股书:2021年净利润、毛利率双降,表现不及同行
- Latex矩阵和表达式组的绘制
- Zigzag 压缩小整数
- nginx代理的域名对应的ip更换后还解析到之前的ip
- EOS基础全家桶(四)启动节点
- vscode运行Live Server报错:Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。
- moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑
- CentOS 服务器 git clone下载加速(下载过慢或超时)