PHP,MVC,404 - 如何重定向到404?

时间:2010-06-16 02:49:25

标签: php http-status-code-404

我正在努力建立自己的MVC作为练习和学习经验。到目前为止,这就是我所拥有的(index.php):

<?php
require "config.php";

$page = $_GET['page'];
if( isset( $page ) ) { 
    if( file_exists( MVCROOT . "/$page.php" ) ) {
        include "$page.php";
    } else {
        header("HTTP/1.0 404 Not Found");
    }
}


?>

我的问题是,我无法使用标头发送到404,因为标头已经发送过了。我应该重定向到404.html还是有更好的方法?随意批评我到目前为止(它很少)。我会喜欢建议和想法。谢谢!

3 个答案:

答案 0 :(得分:6)

MVC框架中的标准做法是使用output bufferingob_start()ob_get_contents()ob_end_clean())来控制发送给用户的方式,时间和内容。

这样,只要你捕获框架的输出,它就不会被发送给用户,直到你想要它为止。

要加载404,您可以使用(例如):

<?php
require "config.php";

$page = $_GET['page'];
ob_start();

if (isset($page)) {
    echo "isset is true";
    if (file_exists(MVCROOT."/$page.php")) {
        include MVCROOT."/$page.php";
        $output = ob_get_contents();
        ob_end_clean();
        echo $output;
    } else {
        ob_end_clean(); //we don't care what was there
        header("HTTP/1.0 404 Not Found");
        include MVCROOT."/error_404.php"; // or echo a message, etc, etc
    }
}
?>

希望有所帮助。

答案 1 :(得分:1)

我不太擅长英语,但我会尝试;运行任何代码之前服务器上的404错误trigers(因为该页面不存在,因此没有代码)。

因此,如果您想在php代码中为用户提供404错误以寻找错误,则必须使用简单的重定向到404.html。

另一方面,如果您可以访问服务器配置文件,则可以在服务器上对其进行编程,而不是在其上运行的网页。你可以使用WAMP练习......

我希望你理解我。的CyaA

编辑我必须添加:

$ page = $ _GET ['page'];

如果没有设置$ _GET ['page'],这将给你一个错误,你必须在尝试使用之前检查isset($ _ GET ['page'])。

答案 2 :(得分:0)

您应该重定向或只是包含它,这里是修改后的代码:

require "config.php";

$page = $_GET['page'];
if( isset( $page ) ) { 
    echo "isset is true";
    if( file_exists( MVCROOT . "/$page.php" ) ) {
        include  MVCROOT . "$page.php";
    } else {
        include  MVCROOT . "404.html";
    }
}