douren2395 2010-06-16 02:49
浏览 51
已采纳

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

I'm trying to build my own MVC as a practice and learning experience. So far, this is what I have (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");
    }
}


?>

My problem here is, I can't use header to send to a 404 because the headers have been sent already. Should I just redirect to a 404.html or is there a better way? Feel free to critique what I have so far (it's very little). I would love suggestions and ideas. Thanks!

  • 写回答

3条回答 默认 最新

  • dongya2030 2010-06-16 03:00
    关注

    Standard practice in MVC frameworks is to use output buffering (ob_start(), ob_get_contents(), and ob_end_clean()) to control how, when, and what gets sent to the user.

    This way, as long as you capture your framework's output, it doesn't get sent to the user until you want it to.

    To load the 404, you would use (for example):

    <?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
        }
    }
    ?>
    

    Hope that helps.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条