如何使用相对于文件所在位置的路径包含文件?

时间:2011-12-16 04:52:20

标签: php

想象一下,父目录中有两个目录, foo bar ,这些目录包含一些PHP文件:

/
/index.php

/foo
/foo/functions.php
/foo/stuff.php

/bar
/bar/doodie.php

让我们说:

  1. functions.php包含stuff.php
  2. index.php包含functions.php
  3. doodie.php包含functions.php
  4. 基于此结构,当index.php运行时,它将在/foo/functions.php目录中查找/foo,必须根据stuff.php的位置使用相对路径包含index.php。这适用于运行index.php的情况。调用doodie.php不起作用,因为functions.phpstuff.php目录中查找/foo,当该位置不存在时是/bar

    是否可以根据文件的位置而不是调用文件来包含文件,而不使用绝对路径(和session variables)?

    如果不清楚我很抱歉,描述这个很难......

3 个答案:

答案 0 :(得分:1)

使用绝对路径。

当然,您不需要每次都包含完整路径。通常的过程是定义一个名为例如APP_PATH的常量,并在引导程序中设置应用程序的绝对路径。

之后,无论何时想要包含文件,都要在include调用中附加APP_PATH常量。这将解决您的问题。

您还可以查看include_path选项,具体取决于文件的位置 - http://php.net/manual/en/function.set-include-path.php

答案 1 :(得分:1)

你可以这样做:
在基本文件夹中创建一个文件;在这个文件中定义这些变量
define('root',SERVER ['DOCUMENT_ROOT']);这确保获得根文件夹
define('foo',root。'/ foo /');这定义了foo文件夹的路径
define('bar',root。'/ bar');这定义了条形文件夹的路径

现在,在您需要调用的任何文件中,包括基本文件,并且您可以访问任何这些文件夹中的任何文件。
所以,如果你已经在/bar/doodie.php中,只需要包含(foo。'functions.php'),反之亦然。
希望有所帮助。

答案 2 :(得分:0)

我建议你去许多MVC的路线。它简单而可靠。只需将所有请求重定向到一个文件,形式为index.php?path = database.php(比如说bootstrap.php),它位于根目录中,然后定义路径。这是我在自制的MVC框架中使用的文件示例。

/**
 * BASE_PATH is for server side inclusions.
 * BASE_URL is for client side inclusions (scripts, css files, images etc.) 
 */
define("DS", DIRECTORY_SEPARATOR);
define("BASE_PATH", dirname(realpath(__FILE__)).DS);
define("BASE_URL", dirname(realpath($_SERVER["SCRIPT_NAME"])).DS);
define("APP_PATH", BASE_PATH."application".DS);

//$url = $_GET['base_url'];


/**Include core file which loads all necessary files */
require_once (BASE_PATH."core".DS."core.php");

这里是core.php(只有一行,因为它有很多行)

//Load config files
require_once(BASE_PATH."config".DS."config.general.php");