【问题标题】:Php 404 Not Found HeaderPHP 404 未找到标头
【发布时间】:2013-04-21 16:21:32
【问题描述】:

我试图理解 3 个简单的 php 代码行的组合, 这是代码:

ob_end_clean();
header('HTTP/1.0 404 Not Found');
exit;

所以这是代码,据我了解,第一行 ob_end_clean();,可以帮助例如 BOM(Byte order mark),所以第一行是为了防止任何先前的输出。

第二行header('HTTP/1.0 404 Not Found');是标头。

第三行 exit 终止脚本执行。

如果我删除第一行并在文档中得到 BOM,我会得到空白页(No 404)。

如果我删除第三行(有和没有 BOM),我会得到我想要的页面,没有空白页,也没有 404。

  • Mabye 如果有人能解释为什么我应该使用 exit 在 404标头
  • 还有为什么使用 BOM 我没有收到“标头已发送错误”

谢谢大家,祝你有美好的一天。

【问题讨论】:

标签: php header


【解决方案1】:

如果我删除第一行并且我在文档中得到了一个 BOM,我会得到空白 页(第 404 号)。 你得到空白 404,因为你没有在那里定义内容......

header('HTTP/1.0 404 Not Found');

只通知用户在 404 错误页面站点... 如果你想为用户显示一些 404 通知,你可以通过加载你的 404.html 文件来做到这一点

if(strstr($_SERVER['REQUEST_URI'],'index.php')){
  header('HTTP/1.0 404 Not Found');
  readfile('404missing.html');
  exit();
}

或直接

if (strstr($_SERVER['REQUEST_URI'],'index.php')){
    header('HTTP/1.0 404 Not Found');
    echo "<h1>Error 404 Not Found</h1>";
    echo "The page that you have requested could not be found.";
    exit();
}

exit 函数的存在是因为你必须阻止另一个 php 代码的执行,它可能直接在 if 之后,或者可能稍后执行,简单地说是 END

【讨论】:

  • 嘿 Lukas,据我了解,您的 if 语句仅适用于索引页面上的代码。
  • 不是,是apache定义的404页面……不知道你的代码是什么情况,只能使用IF语句的内容。注意:header 是“robots”、“crawlers”的消息,echo 是“humans”的消息 ...
  • 谢谢你的回答 Lukas,你能告诉我为什么浏览器解析并显示 404 只有当我杀死脚本的其余部分?
  • 我也试图理解你的 if 语句,正如我所说,我测试并返回 index.php 字符串,当你说“你只能使用 IF 语句的内容”时,你是什么意思,谢谢你,祝你有美好的一天。
  • 看来您的 php 仍在处理中,php 在执行完成之前不会打印输出(到达 php 文件的末尾)。您必须通过退出手动停止它。如果您想在 404 页面上执行一些 php.. 在发送 headecho.. 之前执行此操作。基本 php 的执行可能需要几毫秒,用户在收到 404 msg 之前不会注意到某些内容已被处理。
【解决方案2】:

为什么要在 404 标头之后使用 exit

这样就不会执行更多代码。如果没有,那很好,在这种情况下是没有必要的。不过,这是一个好习惯。

还有为什么我没有收到“标头已发送错误”的 BOM

您没有将 PHP 安装配置为向最终用户显示错误和通知。

【讨论】:

  • 感谢您的回答,关于 404 标头,如果您能告诉我为什么只有当我用(退出)杀死其余代码时,为什么只有这样我才能得到 404 服务器是什么返回浏览器。关于“标头已发送”,您是对的。
  • 我无法理解为什么浏览器只有在我退出脚本时才会读取 404 标头。
猜你喜欢
  • 1970-01-01
  • 2018-04-28
  • 2018-04-29
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 2023-04-11
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多