我知道您可以使用header('Location: next.php')
来完成该解决方案以及其他可能的解决方案,但必须在将任何输出发送到客户端之前使用。我的问题是为什么PHP在任何给定时间都不支持页面重定向的功能。我只是想知道为什么,对解决方案或解决方法不感兴趣。感谢。
答案 0 :(得分:1)
因为它确实是客户端功能。这就是你使用HTML
来实现这一目标的原因。
<META http-equiv="refresh" content="5;URL=http://www.google.com">
答案 1 :(得分:0)
PHP是一种服务器端语言,因此在客户端上显示之前,所有内容都在服务器上进行预处理...因此,任何PHP重定向都应该在将任何内容发送到客户端之前发生...重定向需要在页面之后完成加载必须发生在客户端JS或元刷新代码。
答案 2 :(得分:0)
您必须记住PHP
是 服务器端 语言。因此,一旦页面加载到客户端的浏览器上,您就不再拥有对它的控制或访问权限。在内容离开服务器后,无法操纵客户端浏览器窗口的加载,重新加载或重定位。
答案 3 :(得分:0)
原因是因为您引用的函数使用HTTP标头发送重定向。
HTTP标头必须(在顾名思义)在响应开始时,在任何实际内容之前发送。
只要您发送了任何内容,就无法再发送任何HTTP标头了。这就是为什么它不起作用。
可以使用ob_start()
函数将PHP设置为不发送任何内容。如果您这样做,将能够在生成输出后发送重定向。这是因为HTTP内容不是使用此方法发送的,因此它仍然可以发送HTTP标头。
但在正常情况下,发送任何正文内容意味着您无法发送任何后续标题。
还有其他Javascript方法可以触发重定向,可以在页面主体内容中完成,但这些方法完全不同,并且不能作为标准PHP函数使用。通过将相关的javascript代码作为HTTP内容输出的一部分发送,可以很容易地调用它们。
答案 4 :(得分:0)
这是因为要进行HTTP重定向,重定向必须位于响应头中。标题位于内容正文之前。输出任何正文后,您将无法发送标题。
答案 5 :(得分:0)
因为您在开始发送正文后无法发送标题。
就是这样。一旦脚本输出任何内容,PHP就会开始发送响应(即标题和正文的一部分)。因此,无法在代码中的任何给定时间添加重定向标头。
答案 6 :(得分:0)
因为HTTP不支持它。
HTTP协议实质上将响应拆分为3部分:
200 OK
) PHP认为1和2都是标题,但HTTP在开始刷新内容后根本无法添加新标题(步骤3)。因此,您必须在发送内容之前指定重定向,因为这意味着响应代码将更改为3xx范围内的数字,并添加了Location
标头。
通过使用输出缓冲,您可以在某种程度上通过强制PHP在生成内容时立即发送内容来缓解此行为:
ob_start();
在此调用之后,所有输出都被缓冲,直到您显式刷新它或脚本结束,允许您仍然更改标题。尽管使用它是不好的做法,但在开始渲染输出之前确定请求的结果要好得多。
答案 7 :(得分:-1)
您还可以使用JS解决方案:
<script>location.href="/";</script>
甚至是HTML中的元重定向。只需用PHP输出HTML / JS代码,它就会重定向。