• 技术文章 >php教程 >php手册

    header("Location:login.php")

    2016-06-13 11:35:47原创366
      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 '' . htmlspecialchars($out) . '' ;

      或者等到将来, 再或者把这个字符串送到模板(Template)里再输出.

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP取得用户浏览器和系统函数 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 学习PHP重定向的三种方法• 关于UEditor编辑器远程图片上传失败的解决办法• php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)• 我自己借用精华区里的MIME类写了一个基本的发信小东东(2)• PHP+DBM的同学录程序(2)_php基础
    1/1

    PHP中文网