`

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)里再输出.

分享到:
评论

相关推荐

    PHP Header用于页面跳转时的几个注意事项

    本文介绍的是在PHP中用header(location:test.php)进行跳转要注意以下几点,有助于解决一些新手经常遇到的问题 一、location和“:”号间不能有空格,否则会出错。 二、在用header前不能有任何的输出。 三、header后...

    HTML导出word密封线页眉mso-header

    @page WordSection1 { /* size: 841.9pt 595.3pt; */ size: 1190.55pt 841.89pt;... mso-header: url('./js/header.htm') h1; } div.WordSection1 { page: WordSection1; }

    隐写工具-静默之眼.zip

    3.Header position:标题位置 4.Passphrase:密码 二、Property:属性 1.FilePath:文件路径 2.Format:格式 3.Dimension:尺寸 4.Quality:质量 5.capacity:容量 三、Encode:编码 1.Options:选项 2.Luminance ...

    zencart模板系统文件笔记2:tpl_header.php.pdf

    zencart模板系统文件笔记2:tpl_header.php.pdf

    OpenGL库(多版本打包在一起)

    Header Declared: #include&lt;gl.h&gt; #include&lt;glu.h&gt; Import Library: opengl.lib glu.lib Import DLL: opengl.dll glu.dll ======== GLUT Library ======== Header Declared: #include&lt;gl\glut.h&gt; Import...

    http协议介绍

    { ... //判断 isset($SERVER['HTTP_REFERER'] 是不是以,本网站域名开始... header("location: warning.php"); } }else{ //跳转到警告页面 header("location: warning.php"); }

    ios-swift写的一款简介易用的刷新框架,支持水平刷新.zip

    scrollview.sy_header = TextHeader(normalText: "12", pullingText: "222", refreshingText: "333", orientation: .top, height: 60, font: UIFont.systemFont(ofSize: 14), color: UIColor.black, completion: { ...

    DSP281x_HeaderFiles_QuickStart_Readme.rar_DSP281x_site:en.pudn.c

    DSP281x_HeaderFiles_QuickStart,DSP281x头文件快速入门。主要介绍DSP281x的.h文件构成及编写方法。

    php header函数的常用http头设置

    //ok header(‘HTTP/1.1 200 OK');...header(‘Location: http://www.example.org/‘); //文件延迟转向: header(‘Refresh: 10; url=http://www.example.org/‘); print ‘You will be redirected in 10 seconds'; //当

    header:Editor.js 2.0的标题工具

    const Header = require ( '@editorjs/header' ) ; 下载到项目的源目录 从存储库上传文件夹dist 将dist/bundle.js文件添加到您的页面。 从CDN加载 您可以从加载特定版本的软件包。 ...

    C#-压缩-ICSharpCode.SharpZipLib

    只列举一个压缩帮助类,使用的是有要添加一个dll引用ICSharpCode.SharpZipLib.dll。另外说明一下的是,这个类压缩格式是ZIP的,所以文件的后缀写成 .zip。还有, 如果用这个类来解压rar格式的压缩文件时会报错,就...

    Smart-Header_v1.0.0.5

    Smart-Header_v1.0.0.5

    jmail发送邮件 asp.net使用jmail

     (16)AddHeader( Header, Value )  添加用户定义的信件标头。  如:JMail.AddHeader( "Originating-IP","192.158.1.10" );  (17)AddRecipient(收件人):字符串  如:JMail.AddRecipient( "qiao198@...

    php实现JWT(json web token)鉴权实例详解

    JWT由三个部分组成:header.payload.signature 以下示例以JWT官网为例 header部分: { alg: HS256, typ: JWT } 对应base64UrlEncode编码为:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 说明:该字段为jso

    spring boot报错Error parsing HTTP request header Note:further occurrences of HTTP header parsing error

    2020-02-19 10:34:46.901 INFO 5920 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be ...

    tomcat启动报错:java.util.zip.ZipException的解决方法

    发现问题 早上起来报错误,Jenkins打包到tomcat服务器,死活启动不起来,一些定时任务也没跑成功。 报错如下: org.apache.catalina.startup.ContextConfig.beforeStart Exception fixing docBase for context [/...

    ICSharpCode.SharpZipLib使用代码

    可以直接拿来用,公司工程中已经使用。利用SharpZipLib的库,进行开发的,压缩和解压的代码,都已经测试可以使用,拿来做工程中的压缩和解压模块很方便。

    PHP缩略图库phpThumb.zip

    &lt;?php if (!file_exists('phpThumb.config.php')) { if (file_exists('...header('Location: ./demo/');它是一个开源的图片缩略图类库,可以完成多种复杂的图片缩略图生成和现实,使用起来非常的方便。 

    marketo-rest-proxy:通过伪 REST 代理代理 Marketo 的 SOAP api

    header : { userId : ... , requestTimestamp : ... , requestSignature : ... } , leadRecord : { Email : ... . , FirstName : ... . , LastName : ... . } } 使用节点请求的示例: 'use strict' ; var ...

    php URL跳转代码 减少外链

    header(“Location:”.”http://”.$url);?&gt; 如保存为aaa.php,可以实现aaa.php?url=www.baidu.com跳转到百度的效果. 这个简单的调用了默认的$_GET变量.以及php默认跳转Location: 2.实例升级:增加if循环 代码: ...

Global site tag (gtag.js) - Google Analytics