文档章节

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

anoty
 anoty
发布于 08/20 17:04
字数 438
阅读 242
收藏 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
05/27
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
从零开始打造自己的PHP框架——第1章

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

VoidKing
2017/09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 动态代理的实现

在Java中可以实现动态代理的方式有很多种:JDK方式、ASM字节码操控框架、开源的分析、编辑和创建Java字节码的类库Javassist、基于ASM框架实现的CGLIB JDK方式:通过Java反射的方式生成动态代...

我爱春天的毛毛雨
21分钟前
1
0
css 总结2

1、背景有关 (1)background-origin:border-box、padding-box、content-box //默认是padding-box(2)background-image: url(img_flwr.gif), url(paper.gif);(3)background-posi......

tianyawhl
22分钟前
1
0
java 每秒钟只允许十个线程同时并发

package com.qimh.thread.concurrent;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurren......

qimh
37分钟前
4
0
学习Hadoop大数据基础框架

什么是大数据?进入本世纪以来,尤其是2010年之后,随着互联网特别是移动互联网的发展,数据的增长呈爆炸趋势,已经很难估计全世界的电子设备中存储的数据到底有多少,描述数据系统的数据量的...

本宫没空2
39分钟前
2
0
redis

1,安装 sudo apt-get install redis-server 2,登录本地的 redis-cli 3,修改 .bashrc文件,连接其他线下数据库 vi .bashrc在最后增加alias redisa="redis-cli -h 10.15.100.134 -p 666...

鹏灬
44分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部