0

我已经在我的根目录(即我的教室文件夹)中编写了一个 index.php。这应该是我网站的唯一入口路径。

我的 index.php 的前几行是

索引.php

<?php
     include_once $_SERVER['DOCUMENT_ROOT'].'/classroom/include/db.inc.php' ;
     session_start();
     define('BASE_URL', '/classroom/');
     define('DIR_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
     define('DIR_HOME', DIR_ROOT . 'home' . DIRECTORY_SEPARATOR);
     define('DIR_INCLUDE', DIR_ROOT . 'include' . DIRECTORY_SEPARATOR);
     if(isset($_GET['name']) and $_GET['name'] == 'home' )
     {
          $url='';
          $url= BASE_URL . 'home' . DIRECTORY_SEPARATOR;
          header("Location: $url");
          exit();
     }

现在在主目录中,当我尝试使用“DIR_HOME”或“DIR_INCLUDE”时,它将加载 home.html.php.now。它显示错误消息

( ! ) 注意:使用未定义的常量 DIR_INCLUDE - 在第 17 行的 C:\wamp\www\classroom\home\home.html.php 中假定为“DIR_INCLUDE”

我给你在我的 home.html.php 中发生错误的部分

主页.html.php

<table width="100%" border="0" cellpadding="4px" >
<tr>
 <td>
<table border="0" width="100%" cellpadding="0px" cellspacing="0px">
    <tr>
        <td class="top">
                <?php include(DIR_INCLUDE . 'topper.html.php') ; ?> 
        </td>
    </tr>

当我在我的 index.php 中包含 home.html.php 时,问题就解决了。但是它没有像 localhost/classroom/home 这样的 url,它始终保持为 localhost/classroom。

问题:为什么会出现这个错误?如何通过保留 localhost/classroom/home 之类的 url 来解决它

编辑:我认为存在一些误解。我的问题是如何解决问题,同时它将 url 保持为 localhost/clasroom/home ......如果我在每个脚本中包含所有 dir 定义,那么我也会以同样的方式需要在每个脚本中包含 session_start() ..我的问题是,如果我这样做,它是否会保留单入口路径概念。因为我想维护单入口路径

4

1 回答 1

1

你的问题是你混合了责任。index.php不应包含引导事件,包括该常量定义。

bootstrapper应该始终是单独的文件,在大多数情况下,它应该只定义公共常量和初始化公共变量。

 <?php

 /* File : bootstrap.php */

 include_once $_SERVER['DOCUMENT_ROOT'].'/classroom/include/db.inc.php' ;

 session_start();

 define('BASE_URL', '/classroom/');
 define('DIR_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
 define('DIR_HOME', DIR_ROOT . 'home' . DIRECTORY_SEPARATOR);
 define('DIR_INCLUDE', DIR_ROOT . 'include' . DIRECTORY_SEPARATOR);

您的index.php

 <?php

 require(dirname(__FILE__) . '/bootstrap.php');

 if(isset($_GET['name']) and $_GET['name'] == 'home' )
 {
      $url='';
      $url= BASE_URL . 'home' . DIRECTORY_SEPARATOR;
      header("Location: $url");
      exit();
 }

和你的home.html.php

<?php require(dirname(__FILE__) . '/bootstrap.php'); ?>

<table width="100%" border="0" cellpadding="4px" >
<tr>
 <td>
<table border="0" width="100%" cellpadding="0px" cellspacing="0px">
    <tr>
        <td class="top">
                <?php include(DIR_INCLUDE . 'topper.html.php') ; ?> 
        </td>
    </tr>

这只是使其工作的演示。在现实世界中,您不应该以这种方式编码。了解SOLID原理,OOP以及MVC

于 2013-06-29T17:11:36.030 回答