文档章节

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

anoty
 anoty
发布于 08/20 17:04
字数 438
阅读 234
收藏 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
粉丝 21
博文 35
码字总数 23034
作品 0
浦东
加载中

评论(1)

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

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

sunsky303
05/27
0
0
用grunt构建seajs项目遇到的各种坑

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

jackzlz
2015/11/19
0
0
PHP include_once与require_once区别

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

ufo00001
2017/07/12
0
0
引入文件

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

大仁孙
2016/07/12
6
0
PHP debug_backtrace的胡思乱想

本文示例代码测试环境是Windows下的APMServ(PHP5.2.6) 简述 可能大家都知道,php中有一个函数叫debug_backtrace,它可以回溯跟踪函数的调用信息,可以说是一个调试利器。 好,来复习一下。...

豆浆Melon
2013/05/09
0
35

没有更多内容

加载失败,请刷新页面

加载更多

中文地址

火力全開
34分钟前
0
0
71:循环之for、while、break、continue、exit

1、for循环语法: for 变量名 in 条件;do......;done 1:案例1:求1加到100的和: [root@localhost_02 for]# vim for1.sh #!/bin/bashsum=0for i in `seq 1 100`do sum=$[$sum...

芬野de博客
38分钟前
0
0
Log4j2 Analysis

Log4j2 improvement compare with Log4j : AsyncLogger : Implemented by LMAX Disruptor technology (a lock-free inter-thread communication library, instead of queues, resulting in h......

Yixin_Nemo
47分钟前
0
0
玩转js之——new方法的模拟实现

已知new的作用 1.实例可以访问到构造函数的属性和方法 2.实例可以访问到构造函数原型中的属性和方法 //demo:function Person(name, age) { this.name = name this.age = age}Person...

lsner
47分钟前
0
0
SQL--索引使用(1)

以下是优化真实环境sql。 一、原始sql查询时长如下 二、EXPLAIN分析如下,说明 关于explain的讲解详见我另一篇文章 三、结合sql语句分析出 3.1 可以单独给business_id加索引,会优化一部分效...

求是科技
50分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部