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. 安装 Apache 出现 <OS 10013> 以一种访问权限不允许的方式做了一个访问套接字的尝试

    在安装Apache的过程中出现: 仔细查看提示: make_sock: could not bind to address 0.0.0.0:80 恍然大悟,计算机上安装了IIS7,80端口已占用. 打 ...

  2. 为VirtualBox里的Linux系统安装增强功能

    先说下为什么要安装增强功能, 很重要的原因是分辨率,没有安装增强功能的虚拟机里的系统往往不能全屏的,屏幕显示的内容没有充满整个屏幕. 还有主机和客户机之间共享文件夹也需要客户机的系统安装了增强功能. ...

  3. [v]Debian类系统的有效国内源

    源文件的位置 /etc/apt/sources.list 因为测试需要,装完Debian7 后,更新为163的源,但是后来装软件时,一些软件依赖包还是装不上.后来把163源稍加改动,就好用了.163源 ...

  4. 【SPFA】 最短路计数

    最短路计数 [问题描述]   给出一个N个顶点M条边的无向无权图,顶点编号为1-N.问从顶点1开始,到其他每个点的最短路有几条. [输入格式]   输入第一行包含2个正整数N,M,为图的顶点数与边数. ...

  5. USB HID描述符【转】

    本文转载自: USB是个通用的总线,端口都是统一的.但是USB设备却各种各样,例如USB鼠标,USB键盘,U盘等等,那么USB主机是如何识别出不同的设备的呢?这就要依赖于描述符了.USB的描述符主要有 ...

  6. Java中Properties类的使用

    1.properties介绍 java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值&quo ...

  7. Overview of Flashback Technology

    Oracle Flashback Query : SELECT AS OFOracle Flashback Version Query :DBMS_FLASHBACK PackageOracle Fl ...

  8. PHP删除MySQL数据库下的所有数据表

    <?php //[数据无价,请谨慎操作!] $hostname ='localhost';  $userid = 'username';  $password = 'password';  $d ...

  9. 27、oracle(三)

    1)掌握增.删.改数据和事务操作 2)掌握[视图]和同义词 3)掌握[序列]和索引 4)了解有关用户和权限的控制 ------------------------------------------- ...

  10. java文件上传到服务器

    最近项目中使用到了文件从本地到服务器的功能.其实是为了解决目前浏览器不支持获取本地文件全路径.不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据. 在前台界 ...