0

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

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');" 不应该工作,对吧?

我对远程服务器进行了四次检查,认为可能有一两个杂散文件……没有。这两个要求语句如何具有不同的基本路径......?

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


“文件是根据给定的文件路径包含的,如果没有给出,则根据指定的 include_path。如果在 include_path 中找不到文件,include 最终会在失败之前检查调用脚本自己的目录和当前工作目录。 " 明确地说include dirname(__FILE__) . '/path/to/file.php';可以避免这种混淆。– DCoder

链接到“目录名”上的 PHP 手册。

4

1 回答 1

3

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

出于这个原因,依赖包含路径来解析包含文件的路径并不是一个好主意。您应该改为提供完整路径。

于 2012-11-25T09:13:13.370 回答