`

header("Location:xxx.php") 使用注意

    博客分类:
  • php
 
阅读更多
 
header("Location:login.php")应该注意的几个问题 
header("Location:")作为php的转向语句。其实在使用中,他有几点需要注意的地方。

 

1、要求header前没有任何输出

但是很多时候在header前我们已经输出了好多东西了,此时如果再次header的话,显然是出错的,在这里我们启用了一个ob的概念,ob的意思是在服务器端先存储有关输出,等待适当的时机再输出,而不是像现在这样运行一句,输出一句,发现header语句就只能报错了。

具体的语句有: ob_start(); ob_end_clean();ob_flush();.........

 

2、在header("Location:")后要及时exit

否则他是会继续执行的,虽然在浏览器端你看不到相应的数据出现,但是如果你进行抓包分析的话,你就会看到下面的语句也是在执行的。而且被输送到了浏览器客户端,只不过是没有被浏览器执行为html而已(浏览器执行了header进行了转向操作)。

 

所以,标准的使用方法是

ob_start();

........

if ( something ){

ob_end_clean();

header("Location: yourlocation");

exit;

else{

..........

ob_flush(); //可省略

 

要想在header前有输出的话,可以修改php.ini文件

output_handler =mb_output_handler

或 output_handler =on

 

Output Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。
一、 相关函数简介:
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()


ob_start() 开始输出缓冲, 这时PHP停止输出, 在这以后的输出都被转到一个内部的缓冲里.
ob_get_contents() 这个函数返回内部缓冲的内容. 这就等于把这些输出都变成了字符串.
ob_get_ length() 返回内部缓冲的长度.
ob_end_flush() 结束输出缓冲, 并输出缓冲里的内容. 在这以后的输出都是正常输出.
ob_end_clean() 结束输出缓冲, 并扔掉缓冲里的内容.
举个例子, var_dump()函数输出一个变量的结构和内容, 这在调试的时候很有用.
但如果变量的内容里有 < , > 等HTML的特殊字符, 输出到网页里就看不见了. 怎么办呢?
用输出缓冲函数能很容易的解决这个问题.
ob_start();
var_dump($var);
$out = ob_get_contents();
ob_end_clean();

这时var_dump()的输出已经存在 $out 里了. 你可以现在就输出:
echo '<pre>' . htmlspecialchars($out) . '</pre>' ;
或者等到将来, 再或者把这个字符串送到模板(Template)里再输出.

分享到:
评论

相关推荐

    【基础篇】第06篇:PHP代码审计笔记--URL跳转漏洞1

    3. 其他形式:使用反斜杠 `\` 进行绕过,如`?url=http://www.baidu.com\aaa.com`、`?url=http://www.baidu.com\\aaa.com`。 0x04 白名单限制绕过: 当程序有白名单限制,只允许特定域名(如QQ域名)的跳转时,攻击...

    2018 BAT最新 php面试必考题最新版本.doc

    header("Location: http://www.xxx.php"); ``` ### 5. HEREDOC字符串的使用 - **HEREDOC** 是一种特殊的字符串定义方式,可以方便地插入多行文本而不需使用转义字符。 - **语法**: ```php 这里是字符串内容 ...

    php生成html文件方法总结

    header('Location: xxx.html'); } } ob_start(); // 页面的详细内容 $temp = ob_get_contents(); ob_end_clean(); $fp = fopen('xxx.html', 'w'); fwrite($fp, $temp) or die('写文件错误'); fclose($fp); ...

    php重定向的三种方法分享

    PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如: 声明返回信息的类型(“Context-type: xxx/xxx”),页面的属性(“No cache”, “Expire”)等等。 用HTTP头信息...

    PHP将整个网站生成HTML纯静态网页的方法总结

    header("Location:xxx.html"); } } // 以下代码重复之前的静态化过程... ``` 在这段代码中,我们检查目标HTML文件是否存在,如果存在,比较当前时间与文件最后修改时间。如果时间差小于30分钟,则直接通过header...

    PHP 页面跳转到另一个页面的多种方法方法总结

    PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型(“Context-type: xxx/xxx”),页面的属性(“No cache”, “Expire”)等等。 用HTTP头信息重定向...

    php常见的页面跳转方法汇总

    PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型(“Context-type: xxx/xxx”),页面的属性(“No cache”, “Expire”)等等。 用HTTP头信息...

    ASP.NET程序中常用的三十三种代码.txt

     不要使用Response.Redirect,而应该使用Server.Transfer  e.g // in global.asax protected void Application_Error(Object sender, EventArgs e) { if (Server.GetLastError() is HttpUnhandledException) Server...

    PHP读取远程txt文档到数组并实现遍历

    header("Location: $url"); ``` 但需要注意的是,`header()`函数必须在任何输出(包括HTML、空格或换行)之前调用,否则会抛出错误。 总结起来,这个PHP脚本主要完成了以下任务: 1. 使用`file_get_contents()`...

    了解Cookie txt格式文件

    header("Location:http://www.XXX.net"); ?&gt; ``` #### 七、总结 通过本文的介绍,我们可以了解到Cookie作为一种关键的技术,在现代网络应用中扮演着重要的角色。从创建、存储到读取,以及如何在不同编程环境中实现...

    ASP.NET常用代码

    不要使用Response.Redirect,而应该使用Server.Transfer e.g // in global.asax protected void Application_Error(Object sender, EventArgs e) { if (Server.GetLastError() is HttpUnhandledException) Server....

    ICS delphixe10源码版

    to ease support of multiple versions of Delphi and platforms, and to ease location of similar sample projects. Please don't install V8 over an existing V7 installation, it will be a mess of old and ...

    js使用小技巧

    对象绑定事件 document.all.xxx.detachEvent("onclick",a); 插件数目 navigator.plugins 取变量类型 typeof($js_libpath) == "undefined" 下拉框 下拉框.options[索引] 下拉框.options.length 查找对象 ...

    快速对接payjq的个人微信支付接口过程解析

    header('Location: ' . $url); ``` 除了以上的基本步骤,还需要处理异步通知。当用户完成支付后,Payjq会向指定的回调URL发送异步通知,我们需要在服务器端设置一个接收并处理这些通知的脚本,例如`notify.php`: ...

    Nginx实现非套路镜像站的踩坑记录

    为解决此类匹配问题,文章中提出了两种方案,即通过增加新的Location规则,以及使用rewrite规则来重写请求路径。rewrite规则通常用于修改请求的URI,它可以将请求重定向到新的URI处理逻辑上。文章中的rewrite规则为...

Global site tag (gtag.js) - Google Analytics