require或include相对路径多层嵌套引发的问题

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

时间: 2024-12-12 03:31:04

require或include相对路径多层嵌套引发的问题的相关文章

PHP中require和include路径问题总结

1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / 开头或者windows下的 C:/ 类似的盘符开头的路径,全路径不用任何参考路径就可以唯一确定文件的最终地址. 例如 /apache/wwwroot/site/a/a.php c:/wwwroot/site/a/a.php 未确定路径 凡是不以 . 或者 / 开头.也不是windows下 盘符:/

【转】PHP中require和include路径问题总结

1 绝对路径.相对路径和未确定路径 2. 相对路径: 3. 绝对路径 4. 未确定路径 5. 解决方案 1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / 开头或者windows下的 C:/ 类似的盘符开头的路径,全路径不用任何参考路径就可以唯一确定文件的最终地址. 例如 /apache/wwwroot/site/a/a.php c:/wwwroot

SAX解析多层嵌套XML

最近工程需要解析多层嵌套XML,没有找到合适的公共解析的,要是一个类自己对应写一个解析方法,岂不累死,于是自己写了个通用的解析类.现在还不是很完善,对子类的解析需要提前指定好子类不能动态解析. 我用的是DefaultHandler来处理XML,里面方法执行过程是 public void startDocument() throws SAXException 第一个执行方法. public void startElement(String uri, String localName, String

使用jsonpath解析多层嵌套的json响应信息

Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如: res_dict = { "code": 0, "msg": "成功", "data": { "users": [ {"name": "张三", "gender": "male", "age&

require与include的区别

引用文件的方法有两种:require 及 include.两种方式提供不同的使用弹性. require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份.常用的函数,亦可以这个方法将它引入网页中. include 使用方法如 include("MyIncludeFile.php"); .这个函数一般

js解析多层嵌套的json,取出所有父元素属性和遍历所有子元素

已知一个多层嵌套的json,取出所有父元素和子元素的id值 思路:因为不知道到底嵌套了多少层,递归有可能造成栈溢出.查询时间特别久的问题 所以先查询一次,判断是否有子节点,如果有,取出子节点并到父节点上,并动态更改数据长度,这样无限循环处理json取出所有id menuIdInit () { var _this = this; var _menu = _this.menus; var menuId = []; var len = _menu.length; for(var i = 0; i <

Less-css扩展指定多层嵌套选择器样式

//扩展Extend Use Method:以在study上扩展指定多层嵌套选择器样式 //Share style .test{ font-size:18px; color:#ffffff; ul{ width:100px; height:50px; li{ float:left; margin-right:10px; width:50px; height:50px; } } } //grammar 1 .study{ &:extend(.test ul li); } //grammar 2 .

多层嵌套ajax同步

方式一: $.ajax({ type : "post", url : "user/add", data : data, async : false, //必须为false success : function(para){ para= eval("(" + para+ ")"); alert(para) } }); 方式二(JQ): $.ajaxSetup({ async : false });//为全局变量,必须加,否则同步

asp.net提取多层嵌套json数据的方法

public string GetJsonValue(JEnumerable<JToken> jToken,string key) { IEnumerator enumerator = jToken.GetEnumerator(); while (enumerator.MoveNext()) { JToken jc = (JToken)enumerator.Current; if (jc is JObject||((JProperty)jc).Value is JObject) { retur