简单问题:
如果我启用输出缓冲...
ob_start();
$a = true;
header('Location: page.php');
$a = false;
ob_end_flush();
...如果没有启用输出缓冲,$a会被注册为false,或者它只是重定向页面而不处理命令吗?
谢谢!
简单问题:
如果我启用输出缓冲...
ob_start();
$a = true;
header('Location: page.php');
$a = false;
ob_end_flush();
...如果没有启用输出缓冲,$a会被注册为false,或者它只是重定向页面而不处理命令吗?
谢谢!
除非在重定向头信息之后调用exit()
或die()
,否则页面的其余部分将继续解析(无论是否使用缓冲)。
除非有特殊原因,否则应该始终在header("Location: ...");
之后跟上上述函数,以免浪费CPU周期或内存。
输出缓冲仅仅做其字面意思,不多也不少。它只缓存输出,而不是变量赋值或对象状态。在这个例子中,$a
在你提供的代码示例结束时将被设置为 false
。之后发生的事情取决于你的代码执行。
它将重定向到page.php,而不会处理其余的命令。
*从技术上讲,在头部调用之后,执行将继续进行,除非您在之后明确停止它(使用die、exit)。如果您只是设置变量并显示内容,则永远不会注意到这一点,但如果您有更改数据库的命令,则很难找出这些更改来自哪里。
exit()
将自动刷新缓冲区中的内容到浏览器。您可以在退出之前使用ob_end_clean()
来防止这种情况发生。 - Mike Bheader('Location:...')
指示客户端在将来的某个时间发送新请求(您不知道是否以及何时会发生)。每个请求都会创建一个新的php实例。在旧实例中设置$a=false对新实例没有影响。 - VolkerK