PHP多态根需要

时间:2012-11-25 08:27:44

标签: php directory root

我有一个目录/文件树,如下所示:

index.php

/frame/main_class.php
/frame/func/function_1.php
/frame/func/function_1.php
/cfg/config.php

//index.php

require('frame/main_class.php');
new main_class;

//frame/main_class.php

class main_class{
    public function __construct(){
        require('func/function_1.php');
        require('func/function_2.php');
        require('cfg/config.php');
    }
}

奇怪的是它有效。也许它已经很晚了,我有一个愚蠢的时刻,但不应该“要求('cfg / config');”写成“require('../ cfg / config.php');” ?

如果它使用index.php的根,那么“require('func / function_1.php');”不应该工作,对吗?

我有四倍检查远程服务器认为可能有一个或两个流浪文件......没有。 两个require语句怎么能有不同的基本路径.....?

有没有人知道可能导致这种情况发生的代码段?我正在使用一些$ _SERVER变量,但我似乎没有改变它们中的任何一个....!?


"Files are included based on the file path given or, if none is given, the include_path specified. If the file isn't found in the include_path, include will finally check in the calling script's own directory and the current working directory before failing."明确地说include dirname(__FILE__) . '/path/to/file.php';可以避免这种混淆。 - DCoder

Link to PHP Manual on "dirname".

1 个答案:

答案 0 :(得分:3)

PHP引擎将在当前目录中查找请求的文件,但它也会在INCLUDE_PATH中定义的路径列表中查找它们。如果包含路径列出了运行脚本的路径,那么给定的代码将起作用。如果不是那么它不会。

由于这个原因,依靠包含路径来解析包含文件的路径并不是一个好主意。你应该给出完整的路径。