php - 如果 header 已发送,我如何使用 PHP 重定向?

标签 php http redirect

在 PHP 中重定向到不同页面的规范方式(据我所知)是这样的:

header("Location: URL");
exit();

但假设我需要在部分页面呈现后重定向。我习惯于使用 ASP.NET,我可以在任何地方执行此操作

Response.Redirect("URL");

但我不知道如何在 PHP 中做一些等效的事情。是否可以?如果是,如何,如果不是,为什么不?

最佳答案

使用 header 函数是不可能的,因为它的目的是发送 header (不仅是为了重定向用户),而且当输出开始时你不能这样做,因为为时已晚

一个快速修复方法是为此使用 javascript,但这不是一个“优雅”的解决方案,更不用说如果访问者禁用了 javascript 或 javascript 代码中的上述错误导致问题,它就不起作用。

我认为确保您可以在任何时候重定向的最佳方法是确保在脚本完成之前不呈现任何输出。为此,您至少应该使用模板引擎来确保将 php 代码与 html 分开,并确保内容在最后才发送给用户。

你也可以使用输出缓冲,因为这样你可以延迟输出被限制的时刻(当超过输出缓冲区大小时或者你自己刷新它;参见 php.net/ob_start ;你需要做类似的事情为此:http://codepad.org/AomD4Sok )

PS:不要忘记重定向后的 die/exit,不管你会怎么做

关于php - 如果 header 已发送,我如何使用 PHP 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035312/

相关文章:

http - 在 http.HandleFunc 中记录对传入 HTTP 请求的响应

http - HTTP/1.1 的开源机器可读语法?

java - 在 Java 5/6 中重定向 ProcessBuilder 的输出?

php - JQuery/Javascript 使用生成的 ID 设置表单字段的值

php - 多个动态查询范围

PHP PDO mysql 按结果 ID 获取行

javascript - 使用 jquery 或 javascript 重定向到新博客

php - 加密后的密码失效

java - 如何在 Java 中发送 HTTP 请求?

Django + azure : How to implement a 301 redirect from naked to www domain