我有一个目录/文件树,如下所示:
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
答案 0 :(得分:3)
PHP引擎将在当前目录中查找请求的文件,但它也会在INCLUDE_PATH中定义的路径列表中查找它们。如果包含路径列出了运行脚本的路径,那么给定的代码将起作用。如果不是那么它不会。
由于这个原因,依靠包含路径来解析包含文件的路径并不是一个好主意。你应该给出完整的路径。