PHP输出缓冲

时间:2009-12-26 17:44:11

标签: php

简单问题:

如果我启用输出缓冲...

ob_start();
  $a = true;
  header('Location: page.php'); 
  $a = false;
ob_end_flush();

...将 $ a 注册为false,或者只是在不处理命令的情况下重定向页面(如果没有启用输出缓冲那样)?

谢谢!

3 个答案:

答案 0 :(得分:8)

除非您在标题重定向后调用exit()die(),否则$ a将为false,因为页面的其余部分将继续解析(使用或不使用缓冲)。

除非您有特殊原因,否则header("Location: ...");应始终遵循上述功能之一,以免浪费cpu周期或内存。

答案 1 :(得分:2)

输出缓冲完全符合名称的推断,仅此而已。 缓冲输出,而不是变量赋值或对象状态。在这种情况下,$a将在您提供的代码示例的末尾设置为false。之后会发生什么事情取决于您的代码执行。

答案 2 :(得分:1)

它将重定向到page.php而不处理其余的命令。

*从技术上讲,除非你在(die,exit)之后专门停止,否则执行会继续执行标题调用。如果您只是设置变量并显示内容,您将永远不会注意到这一点,但如果您有更改数据库的命令,则很难找到这些更改的来源。