嵌套文件包含路径问题|学习笔记

简介: 快速学习嵌套文件包含路径问题

开发者学堂课程【PHP 基础入门课程(下)嵌套文件包含路径问题】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/710/detail/12652


嵌套文件包含路径问题


内容简介:

一、嵌套文件包含路径问题的概念

二、 举例解析嵌套文件包含路径问题

三、小结


一、嵌套文件包含路径问题的概念

嵌套包含路径问题:指的是在进行文件包含时使用了相对路径(./或者../),而且文件又有嵌套包含,导致./或者../无法正确识别路径

• 每个文件夹下都有./和../

• 嵌套包含会让系统无法正确原文件中./和../到底从哪开始

• 系统永远从当前工作目录的./和/开始寻找


二、举例解析嵌套文件包含路径问题

举例说明:

1.A 文件夹中有文件 a.php 和 B 文件夹

2.B 文件夹中有 b.php 和 C 文件夹

3.c 文件夹中有 c.php

4.a.php 包含 b.php,同时 b.php 包含 c.php

5.访问 a.php

新建一个54include.php 文件,假设为 a 文件

a 作为顶级文件(也称被请求文件),这时 a 文件有一个同级目录 parent,parent 中有 parent.php 文件,输入代码:include './parent/parent.php’;在这里包含当前目录 parent 下的 parent.php 文件。

image.png

在被包含的 parent.php 文件中,包含子文件夹中的文件,在 parent 文件夹中新建一个 son 文件夹,在 son 文件夹中新建一个 son.php 文件;只做一个输出作用

输入代码:include './son/son.php’;在这里包含当前目录下的 son.php 文件。

image.png

打开执行网页访问 parent/parent.php,输出结果如下:

首先 parent.php 先输出自己,然后再包含 son,son 中包含了对自己的路径 son.php 文件。

image.png

打开执行网页访问 54include.php,54include.php 是 son 的上级的上级,也是 parent 的上级,执行结果如下:parent.php 找到了,但是继续执行 son 的时候出现报错,报错原因找不到 ./son/son.php

image.png

原因在于 include 包含了 parent 文件,即可以将创建 parent 文件代码直接输入至 include 中,如图:

image.png

上述代码就是 parent 文件,执行时在当前目录下不会报错;当再往下执行 ./son/son.php时,./ 为当前目录,而当前目录为 54include.php 的目录,即当前目录为 htdocs,所以执行时系统会去 htdocs 下找一个名为 son 的文件夹,但 son 的文件夹不在此处。但将./去掉后,执行效果如下:说明当前的 include 是生效的,只是带有./的 include 是无效的

image.png

将带有./的 include 注释后,执行效果如下:

image.png

两种结果出现的原因就是当前 parent.php 中的 include ’son/son.php';没有用./,所以执行时系统会进入 son/son.php 文件所在的位置,也就是 parent 文件夹,然后再往下面找;而./每个文件夹都有,所以出现报错情况。

echo getcwd()函数会获取当前的一个工作路径,就能看到当前的工作路径在 htdocs 中,在 htdocs 中就说明下面要执行的代码会自行拼接到 htdocs 后,所以就会变成 htdocs 下面去找 son,自然就找不到了。

image.png

但用 include 'son/son.php’; 方式就不会出错,就是因为这种方式能记住原本所在的路径 parent 文件夹。

image.png

注意:

1、独立访问 b.php 和 c.php 都没有问题

例如独立访问 son.php,输入执行代码 parent/son/son.php

image.png

2、访问 a.php,那么当前的工作路径就是 A 文件夹,b.php 是在 A 目录工作,所以 b.php 的./目录属于 A,因此找不到 A 文件夹下的 C 文件夹


三、小结

1、文件嵌套包含时./和../容易产生路径错乱问题

• 每个文件夹下都有./和../(系统只会就近匹配,不能区分原本的./)

• 脚本中的./和../是根据实际工作目录(被请求工作目录)而定,而不是文件所在目录

2、为了避免出现嵌套路径问题,我们可以用以下解决方案

• 不使用相对路径./和../包含文件

• 使用绝对路径包含文件(不会出错,推荐使用)

• 所有文件都放到一个文件夹下(几乎不可能,不利于维护)

相关文章
|
安全 网络协议 Shell
学习干货|实战某次行业攻防应急响应
学习干货|实战某次行业攻防应急响应
370 4
|
9月前
|
人工智能 运维 监控
从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓
唯有通过全行业的协同努力,加强整体、完善的网络安全可观测建设,才能为 AI 技术的创新和发展构建一个安全而稳固的环境。我们期盼并相信,在攻克这些网络安全难题之后,AI 创新将迎来更加安全、灿烂的未来。
|
10月前
|
存储 监控 安全
阿里云助力《诛仙世界》端游正式开服!
阿里云助力《诛仙世界》端游正式开服!
226 1
|
Docker 容器
多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱
多功能秒达开源工具箱源码,,可自部署且完全开源的中文工具箱,永远的自由软件,轻量级运行,全平台支持(包括ARMv8),完全类似 GPT 的支持,与高效的 UI 高度集成,可用的 Docker 映像和便携式版本,桌面版支持,开源插件库。
415 5
多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱
|
数据安全/隐私保护 Android开发 UED
【Uniapp 专栏】Uniapp 在社交应用开发中的案例研究
【5月更文挑战第12天】本文探讨了一个使用Uniapp开发的社交应用案例,该应用提供用户注册登录、个人资料管理、好友关系、动态发布、消息聊天等功能。Uniapp的跨平台特性和丰富的组件简化了开发过程,确保应用在iOS和Android上的兼容性。特色功能如话题标签、点赞评论和附近的人增加了用户互动。设计上追求简洁美观,同时重视数据安全。此案例展示了Uniapp在社交应用开发的潜力和优势。
369 4
|
人工智能 小程序 算法
微信小程序地图定位的核心技术与实际应用详解
在移动互联网时代,微信小程序凭借其轻量化和普及性,成为室内地图导航的理想平台。本文探讨了微信小程序在室内定位领域的创新应用,包括蓝牙iBeacon定位、高精度地图构建及AI路径规划等核心技术,及其在购物中心、医院、机场火车站和景区等场景的应用,展示了其为用户带来的高效、智能的导航体验。
740 0
|
机器学习/深度学习 监控 算法
YOLO及其原理介绍
YOLO及其原理介绍
|
机器学习/深度学习 运维 监控
计算机在能源领域的应用
计算机在能源领域的应用
|
SQL 缓存 Java
一文彻底搞懂Mybatis系列(十五)之MyBatis二级缓存
一文彻底搞懂Mybatis系列(十五)之MyBatis二级缓存
627 0