require或include相对路径多层嵌套引发的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了require或include相对路径多层嵌套引发的问题相关的知识,希望对你有一定的参考价值。
php中require/include 包含相对路径的解决办法
在PHP中require,include一个文件时,大都是用相对路径,是个很头疼的问题。
例如:
(网站根目录)
├文件夹
│ │
│ └1.php
├文件夹
│ │
│ └2.php
└index.php
问题:在1.php中通过include(“../B/2.php”)来引入B目录下的2.php文件;
在index.php中通过include(“A/1.php”)来引入A目录下的1.php文件;
运行出来当然会出现问题,找不到../B/2.php文件。
这是因为:
1.php被编译到index.php中执行,也就是相当于1.php同index.php一样位于网站根目录下,但是在1.php别忘记了一段代码include(“../B/2.php”);
“../”意味着什么?上一级目录,现在1.php已经在根目录下了,这时候再上一级,那就已经找不到2.php了,所以问题就出现在此。
很多人会想到include(“/B/2.php”),这样不就好了,同样不行php不同于我们的jsp,在include中使用”/”并不是我们所想象的网站根目录,它代表的的
当前的目录,因此还是不行。
既然不能用相对的,那我们可以改用绝对路径的方式。只是在包含文件之前,先包含一个global.php
文件。这个文件的内容是:
<!--?php
chdir(dirname(__FILE__));
?-->
它的作用是将当前目录切换到global.php所在的路径。
将global.php放在根目时录下,在这之后包含的所有文件就会以根目录为基准了。
例如,在2.php中引用1.php,则通过2步:
1.require(dirname(__FILE__).‘/../global.php’);//视具体的目录情况,反正是要指回到根目录下的global.php
2.require(‘A/1.php’)//从根目录开始定位
这样的话,不管页面在哪一级目录,我都可以去引用,不用再担心路径问题了!
注:chdir()函数的用法
相关函数:getcwd, chroot
头文件:#include <unistd.h>
定义函数:int chdir(const char * path);
函数说明:chdir()用来将当前的工作目录改变成以参数path 所指的目录.
返回值执:行成功则返回0, 失败返回-1, errno 为错误代码.
范例
#include <unistd.h>
main()
{
chdir("/tmp");
printf("current working directory: %s\n", getcwd(NULL, NULL));
}
执行:
current working directory :/tmp
头文件:#include <unistd.h>
定义函数:int chdir(const char * path);
函数说明:chdir()用来将当前的工作目录改变成以参数path 所指的目录.
返回值执:行成功则返回0, 失败返回-1, errno 为错误代码.
范例
#include <unistd.h>
main()
{
chdir("/tmp");
printf("current working directory: %s\n", getcwd(NULL, NULL));
}
执行:
current working directory :/tmp
以上是关于require或include相对路径多层嵌套引发的问题的主要内容,如果未能解决你的问题,请参考以下文章