文档章节

php require和include 相对路径一个有趣的坑

anoty
 anoty
发布于 2018/08/20 17:04
字数 438
阅读 250
收藏 1
PHP

以前总是被教育,不要使用相对路径,这样性能比较差,但是相对路径的问题不仅仅是性能哦,看下面这里例子

这是项目结构

.
├── main.php
├── t
│ ├── t1.php
│ └── t2.php
└── t2.php

main.php

<?php
include __DIR__ . "/t1.php";
include "t2/t1.php";

t1.php

<?php
include_once "t2.php";
echo __FILE__,PHP_EOL;

两个t2.php都是

<?php
echo __FILE__,PHP_EOL;

在运行php main.php 并没有像我们预期的一样输出三个文件的路径

/opt/project/t2.php
/opt/project/t/t1.php

而是值输出了两个,为什么呢?

如果把include_once改成include,就能看出一些端倪

/opt/project/t2.php
/opt/project/t2.php
/opt/project/t/t1.php

看出来了吗?项目根目录下的t2.php被include两遍

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找

这句话摘自官方手册 http://php.net/manual/zh/function.include.php

从手册上这段描述可以看出,如果是同名文件,相对路径项目根目录的优先级大于脚本所在的当前目录,所以就出现了上面的现象。

所以,include|require 不要用相对路径。

更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号:PHP架构师

© 著作权归作者所有

共有 人打赏支持
anoty
粉丝 25
博文 42
码字总数 26186
作品 0
浦东
私信 提问
加载中

评论(1)

道明淑华
道明淑华
学习了
深入理解PHP之require/include顺序

作者: Laruence( ) 本文地址: http://www.laruence.com/2010/05/04/1450.html 转载请注明出处 在大型的Web项目中, includepath是一个模块化设计的根本中的根本(当然,现在也有很多基于autoloa...

sunsky303
2018/05/27
0
0
从零开始打造自己的PHP框架——第1章

目标 本篇,我们来实现类库自动加载,以及路由解析。 原文地址:http://www.voidking.com/2017/08/29/deve-vkphp-1/ 类库自动加载 常规加载 常规加载一般使用include或者require,它们最根本...

VoidKing
2017/09/13
0
0
PHP include_once与require_once区别

①作用及用法   可以减少代码的重复   include(once)("文件的路径")与require(once)("文件的路径") ②理解   说白了,就是用包含进来的文件中的内容 代替 include(once),require(...

ufo00001
2017/07/12
0
0
用grunt构建seajs项目遇到的各种坑

使用grunt构建seajs项目遇到的各种坑 [TOC] 使用grunt-cmd-transport转换为具名模块遇到的问题 1. 最新版本依赖不能完全提取 最新版本0.5.1不能完全提取依赖,需要降级到0.4.1。 参考:https...

jackzlz
2015/11/19
0
0
引入文件

一、Html中引入Html文件: 在论坛中常常有网友问到,可以在一个html的文件当中读取另一个html文件的内容吗?结果是确定的,而且方法不只一种,在以前我只会使用iframe来引用,后来发现了另外...

大仁孙
2016/07/12
6
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql grant 用户权限总结

用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用...

Airship
27分钟前
1
0
RabbitMQ学习(3)

1. 消费端 1. 消费端通过推模式或者拉模式从RabbitMQ中获取并消费消息,当消费者确认处理消息后,可以手动确认消息已被接收,然后就会将该消息从RabbitMQ的队列中标记再清除,消费者端还可以...

江左煤郎
38分钟前
1
0
linux mysql(5.7)开启慢查询

一、有3个配置需要设置, 1:相关开关 2:日志目录文件 3:慢查询的时间限制 二、设置完之后重启mysql service mariadb restart 三、重启后做个测试 连接mysql 并查询: select sleep(6); 四...

chro008
45分钟前
2
0
选择IDC机房、选择硬件、上架服务器、装系统

选择IDC机房 当业务量比较大的时候,往往选用IDC而不是公有云来跑业务。 IDC机房的服务一般分为两种 需要我们自己购买服务器和网络设备,托管到IDC机房。IDC机房会提供布线、巡检、硬件操作等...

李超小牛子
47分钟前
2
0
《傲慢与偏见》的读书笔记与读后感作文2400字

《傲慢与偏见》的读书笔记与读后感作文2400字: 作者:孙苑馨;笔者按:读书这个习惯是我爸妈养出来的。小时候父母赚的钱除了吃饭穿衣剩下的就是买书了,他们除了买各种新鲜出版的文艺派图书...

原创小博客
55分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部