当前位置:Gxlcms > PHP教程 > require目录

require目录

时间:2021-07-01 10:21:17 帮助过:8人阅读

osadmin的目录如下

注意
index.php在uploads目录下,
init.inc.php在uploads/include目录下
config.inc.php在uploads/include/config目录下

index.php:
require ('./include/init.inc.php');

init.inc.php:
require 'config/config.inc.php';

按理说访问index.php页时,寻找config.inc.php页的路径应为uploads/config/config.inc.php,是一个错误路径,但为什么实际运行确能找到?各位能解释下是怎么找到的吗。

难道解析这种既不是绝对路径,又不是相对路径的的路径,还有什么基情。

(补充)include_path:‘.;C:\php\pear’


回复讨论(解决方案)

init.inc.php:
require 'config/config.inc.php';

init.inc.php里面不是包括了config.inc.php 么,当然能找到啦。

php不是参照入口文件的路径吗?也就是说 在找config.inc.php时应该是按“uploads/config/config.inc.php”这个路径找,但显然这个路径不存在,存在的是“uploads/include/config/config.inc.php”。难道不是这样?

require 'config/config.inc.php';
不是在 init.inc.php 中执行的吗?
所以既然只有 uploads/include/config/config.inc.php 存在,当然就加载他了

你#2的描述是正确的
如果你有 uploads/config/config.inc.php 文件,那么这个文件将被优先加载
也就是说,你可以用这种方法干预应用系统的行为

下面是用我的伪代码描述require请求文件的处理,看对否:
相对路径:前面带./或者../的路径,如'./include/init.inc.php'
伪相对路径:前面不带./或者../且又不是绝对路径的路径,如'config/config.inc.php'
当前工作目录:web环境下,即入口文件所在目录

if(path为绝对路径){    file_path=path;}else if(path为相对路径){    file_path=conbine(当前工作目录,path);}else{    //伪相对路径    dir_list=include_path;    dir_list.add(当前工作目录);    dir_list.add(调用语句所在目录);    foreach(dir_list as dir){        temp_path=conbine(dir,path);        if(temp_path存在){            file_path=temp_path;            return;        }    }}

访问index.php页时
require 'config/config.inc.php';
其实生效的是
file_path=conbine(调用语句所在目录,path)
这里调用语句所在目录,即init.inc.php文件所在目录,从而正确找到文件。

是的,是这样的

人气教程排行