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

新增内容:第二天再次用到这个知识点,但是发现了一个问题,如下
网站根目录
  ----文件0
  ----目录1
  --------文件1
  --------文件2
  ----目录2
  --------文件3
现在目录3中引入了文件0,文件0中有chdir(__FILE__),然后在文件3中按网站绝对路径引入文件2,此时文件2已经处于网站根目录中,文件2要引入文件1,
根据上面的知识,应该也是按照网站根目录绝对路径引入(这种方法当然可以),但是无意中发现在文件2中直接引入文件1也是可行的。自己理解了一下,
原理应该是: 此时的文件2被拉入了根目录,与此同时文件2所在的目录也被变为了根目录,于是文件1也就是 处于根目录中了,所以直接引入和按照网站
根目录绝对路径引入是一样的效果。这一点总结起来就是一句话:任何情形下,处于同一文件夹(同一级)的文件都可以直接引用!
 
新增: 按上述方法引入后, 下面的html中的路径不受影响(如src href等等,),但是下面的php文件路径受影响,如copy($source,$dest)中的路径等等
php代码  header('refresh:3;url=http://www.baidu.com')中的这个url实质属于html路径,不受上述方法影响。
新增:在单纯的类文件A中用到本文件中没有定义的类B时,不会有任何问题(不需要引入包含B的文件)。只要保证实例化类A的文件中引入B文件即可。

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

  1. PHP中require和include路径问题总结

    1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php (相对当前目录) ../common.inc.php (相对上级目录), 绝对路径 绝对路径是以 / ...

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

    1 绝对路径.相对路径和未确定路径 2. 相对路径: 3. 绝对路径 4. 未确定路径 5. 解决方案 1 绝对路径.相对路径和未确定路径 相对路径 相对路径指以.开头的路径,例如 ./a/a.php ...

  3. angularjs ui-view多视口多层嵌套路由配置

    最近研究了一下ui-view多层嵌套,整理了一下 1.最简单的ui-view用法 html部分: <ul class="nav navbar-nav"> <li ...

  4. 2019-07-24 require 和 include的区别

    require 和 include 都是文件引入的常用用法.那他们有什么区别吗? 首先我们创建一个需要引入的文件叫做test.php,里面写上简单的一行代码: echo "我是要被引入的文件 ...

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

    Python自带的json库可以把请求转为字典格式, 但在多层嵌套的字典中取值往往要进行多次循环遍历才能取到相应的数据, 如: res_dict = { "code": 0, &q ...

  6. 修改if-else多层嵌套的方法

    例子:在判断三角形形状的一个程序中,会出现 if-else 的多层嵌套,可利用程序的顺序执行结构重构代码,使其更可读.如果还想保证代码的安全性,可以用函数封装这段代码. #include <st ...

  7. ASP.NET提取多层嵌套json数据的方法

    本文实例讲述了ASP.NET利用第三方类库Newtonsoft.Json提取多层嵌套json数据的方法,具体例子如下. 假设需要提取的json字符串如下: {"name":&quo ...

  8. 元素多层嵌套,JS获取问题

    如果一段html嵌套过多,在js中获取还是比较麻烦的,我写了几套方案,大家可以参考参考,如果你有好的方法,也分享出来,让我们瞧瞧. HTML: <!DOCTYPE html> <ht ...

  9. .net(c#)提取多层嵌套的JSON

    Newtonsoft.Json.Net20.dll 下载请访问http://files.cnblogs.com/hualei/Newtonsoft.Json.Net20.rar 在.net 2.0中提 ...

随机推荐

  1. android 学习随笔十四(页面跳转与数据传递)

    1.activity 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> ...

  2. java的web项目中使用cookie保存用户登陆信息

    本文转自:http://lever0066.iteye.com/blog/1735963 最近在编写论坛系统的实现,其中就涉及到用户登陆后保持会话直到浏览器关闭,同时可以使用cookie保存登陆信息以 ...

  3. redis 笔记06 发布与订阅、事务、慢查询日志、监视器

    发布与订阅 1. 服务器状态在pubsub_channels字典保存了所有频道的订阅关系:SUBSCRIBE命令负责将客户端和被订阅的频道关联到这个字典里面,而UNSUBSCRIBE命令则负责 解除客 ...

  4. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  5. 如何优化tomcat配置(从内存、并发、缓存4个方面)优化

    Tomcat有很多方面,我从内存.并发.缓存四个方面介绍优化方法.  ** 一.Tomcat内存优化 ** Tomcat内存优化主要是对 tomcat 启动参数优化,我们可以在 tomcat 的启动脚 ...

  6. FormData对象实现文件Ajax上传

    后台: import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; imp ...

  7. Java SE、Java EE和Java ME有什么区别?

    Java现在已不仅仅是一种语言,从广义上说,它代表了一个技术体系.该体系根据应用方向的不同主要分为Java SE.Java EE和Java ME的3个部分. 1998年12月份Sun公司公布的Java ...

  8. Linux系统中为php添加pcntl扩展的方法

    1.首先看下 phpize命令 所在的目录  (ps:我的目录/usr/bin/phpize)如果没有找到的话 执行安装yum install php53_devel (ps:请注意自己的版本) 安装 ...

  9. [vuforia][unity3d]资源链接

    http://bbs.csdn.net/topics/390787189 CSDN论坛中 “Qualcomm Vuforia(AR虚拟现实)开发” 主题资源下载 http://bbs.csdn.net ...

  10. 结对2.0--复利计算WEB升级版

    结对2.0--复利计算WEB升级版 复利计算再升级------------------------------------------------------------ 客户在大家的引导下,有了更多 ...