【问题标题】:exit(header('location: index.php')); - Does this raise issues?退出(标题('位置:index.php')); - 这会引起问题吗?
【发布时间】:2026-01-28 07:15:02
【问题描述】:

我总是使用标题然后退出方法。最近我尝试了 exit(header('location: index.php'));它似乎工作。有人遇到过这种方法的问题吗?

【问题讨论】:

  • 即使工作我想我更愿意将它们称为 2 个单独的函数。并且标头 URI 应该是完整的而不是相对的
  • 为什么URI应该是绝对的?
  • 因为manual 这么说 :-) “HTTP/1.1 需要一个绝对 URI 作为 » Location 的参数:包括方案、主机名和绝对路径,但有些客户端接受相对 URI。您可以通常使用 $_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF'] 和 dirname() 自己从相对的 URI 中创建绝对 URI:"
  • 哇。我从来没想到。自 PHP 版本 1 以来我一直在做错事。我想知道为什么它会有所作为?我想不出任何时候我都在追查那个问题的错误。
  • 较旧或非常基本的 HTTP 客户端可能会被相对 URL 混淆。然而,新的HTTP/1.1bis specification 允许非绝对引用。几乎所有的浏览器都实现了它们,因为永远。 (个人偏好:虽然只使用绝对 URL。)

标签: php


【解决方案1】:

这和以下没有什么不同:

header('location: index.php'); exit;

当使用exit(header('location: index.php')); 时,header 函数执行重定向,然后不返回任何内容,并且不带参数调用 exit 只会在没有自定义消息的情况下退出。

【讨论】:

  • 从技术上讲,header() 可能返回 null,从而导致调用 exit(null)。从理论上讲,这可能与不带参数调用 exit 略有不同,但实际上可能几乎没有区别。
  • 嗯,文档说No value is returned,他们通常会指定是否返回NULL,所以我不确定它是否与exit(NULL)相同。
  • 如果你试图从一个没有返回的函数中提取返回值,你会得到null。下面是一个例子:phpfiddle.org/main/code/wpg-8h3
【解决方案2】:

Exit 需要一个可选的退出代码,因此它没有理由不工作。但是,为了清楚起见,我仍然会打破这两条线,以防万一未来版本的 php 引入不需要的行为

【讨论】:

  • 我写过的一些最好的代码是我从项目中删除的代码。在我的大多数 MVC 项目中,重定位标头并不多。但是,使用单行代码可以大大减少程序代码(在逻辑代码中)。或许你是对的。前者确实读起来更好。
  • 如果你想要一行那么为什么不header('location: index.php'); exit;
  • 好的。你让我到了那里。从技术上讲。哈哈Edit等等!我的编辑器打破了格式化的界限。所以从技术上...
  • 您对 PHP 未来版本的看法可能比人们想象的更重要。我可以看到标题事件在哪里可以真正成为更改的候选者。很好的想法。
  • if($valid){\r\nheader(...);\r\nexit;\r\n} 变成一行: $valid?:exit(header(...) );这可以在整个应用程序中叠加,并且仍然很容易阅读。