使php包含在子目录中的工作

时间:2009-07-24 22:20:39

标签: php directory include

好的,我正在url / admin为我的自定义博客创建一个管理界面。

我是否可以使用相同的包含(包括自动加载)作为根目录。

如果可能的话,我还希望能够自动更正导航中的链接,以便当从/ admin访问时,它们会从/更改为../index.php中的index.php。

谢谢,Nico

4 个答案:

答案 0 :(得分:19)

最佳做法是定义一个'ABSOLUTE_PATH'常量,该常量包含所有内容所在的目录。之后,您可以简单地复制并粘贴所有内容,因为它定义了“完整”路径,该路径不会在目录之间发生变化。

实施例

define("ABS_PATH", $_SERVER['DOCUMENT_ROOT']);

or

define("ABS_PATH", dirname(__FILE__));
// This defines the path as the directory the file is in.

然后,您可以随时执行此操作以包含文件

include(ABS_PATH . "/path/to/file");

答案 1 :(得分:3)

最简单的方法是使用绝对路径/ URL。

对于URL,在某处定义一个常量/变量,指向应用程序的根目录,如:

define('ROOT_URL', 'http://www.example.com');

$root_url = 'http://www.example.com';

并在每个链接中使用它,例如:

<a href="{$root_url}/my-page.php">blah</a>

这样,总是好的(当你在另一台服务器或子目录中安装项目的那一天,你只需要修改一个常量/变量,一切仍然有效)

对于包含/要求,也总是使用绝对路径;一个解决方案是使用dirname,如下所示:

include dirname(__FILE__) . '/my_file.php';
include dirname(__FILE__) . '/../my-other-file.php';

__FILE__是当前文件,您正在编写此行; dirname获取包含该文件的目录的路径(完整路径)。

有了这个,您就不必担心文件的相对路径。

答案 2 :(得分:0)

另一个答案类似于结合前两个建议。您可以定义常量:

define('ABSPATH', dirname(__FILE__).'/');

然后,假设config.php需要包含在网站的许多文件中,那么您可以使用以下语句来完成此任务:

include(ABSPATH.'config.php');

希望这有帮助。

答案 3 :(得分:0)

我过去用于functions.php的另一个选项是类自动加载器。

//Class Autoloader
spl_autoload_register(function ($className) {

    $className = strtolower($className);
    $path = "includes/{$className}.php";

    if (file_exists($path)) {

        require_once($path);

    } else {

        die("The file {$className}.php could not be found.");

    }
});

这在某些情况下有效,过去我不想定义绝对的$ root网址时对我有帮助。