2013-04-27 94 views
6

我想了解的3个简单的PHP代码行组合, 这是代码:腓404未找到部首

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

所以这是代码和我的理解,第一线ob_end_clean( );,可以帮助例如BOM(字节顺序标记),所以第一行是防止任何以前的输出。

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

而第三行退出终止脚本执行。

如果我删除第一行,并且在文档空白页(No 404)上获得了BOM

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

  • Mabye如果有人能解释我为什么要使用退出的 404头之后
  • 也就是为什么在BOM我不明白“标题已经发出错误”

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

+0

可能的重复[为什么我的PHP应用程序不会发送404错误?](http://stackoverflow.com/questions/437256/why-wont-my-php-app-send-a-404-error ) – Arend 2014-04-02 13:35:40

回答

10

如果我删除了第一行,并在文档中获得了BOM,我得到空白 (No 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或可后来excecuted,简单地把它说END

+0

嘿卢卡斯,因为我明白你的if语句仅用于索引页面上的代码工作。 – 2013-04-27 16:44:01

+0

不,它是404页面的apache定义...我不知道你的代码是什么情况,你只能使用'IF'语句的内容。注意:header是'robots','crawlers'的消息,echo是'人类'的消息... – 2013-04-27 17:03:05

+0

谢谢你的回答Lukas,你能告诉我为什么浏览器解析并显示404只有当我杀了脚本的其余部分? – 2013-04-27 17:10:33

1

我为什么要使用出口处404头

因此不会执行进一步的代码。如果没有的话,很好,在这种情况下没有必要。虽然这是一个很好的习惯。

也就是为什么在BOM我不明白

“已经发出错误头”你没有配置PHP安装来显示错误,并通知到最终用户。

+0

感谢您的回答,关于404头如果您可以请告诉我为什么只有当我用其他(退出)代码将其余的代码关闭时,为什么只有这样我才能得到404服务器返回到浏览器的内容。关于“标题已发送”,你是对的。 – 2013-04-27 16:35:15

+0

我不明白为什么浏览器只有在退出脚本时才会读取404头。 – 2013-04-27 16:52:21