__FILE__=D:\Soft\xampp\htdocs\test\test.php
__DIR__=D:\Soft\xampp\htdocs\test
getcwd()=D:\Soft\xampp\htdocs\test
$_SERVER["SCRIPT_FILENAME"]=D:/Soft/xampp/htdocs/test/test.php

现在你有一个folder temp, 里面有 a.php 和 sub folder temp1,temp1 folder里面有 b.php 和 c.php。

路径显示如下:

temp\a.php

  \temp1

   --> b.php
   --> c.php

如果你需要在a.php 引入 b.php文件,你会这么写:

a.php

1 <?php
2 require_once 'temp1/b.php';
3
4 //... Code goes here ...
5
6 ?>

b.php里面引入了 c.php:

b.php

<?php
require_once 'c.php'; // ... Code goes here ...
?>

这时候就出现问题了!a.php 引入 b.php,可是 b.php里有引入 c.php。在这里系统会直接寻找和a.php同个目录的c.php哦!可是目前这个目录只有 a.php一个文件而已,所以某些情况下会发生一些意想不到的事情。

有时候c.php里面的代码会不正常,又或者是 如果当前目录也有 c.php的话,两个不同目录的 c.php会被同时使用 等等。

为了解决这个问题,PHP引入了一个 constant variable 叫做 __DIR__ 。这会获取当前目录的路径,可以保证你要引入的文件是从那个路径来的。

在 b.php的 require_once 'c.php' 改成 require_once __DIR__ . '/c.php' 就能解决之前所说的问题了:

1 <?php
2 require_once __DIR .'/c.php';
3
4 // ... Code goes here ...
5
6 ?>

__FILE__、__DIR__区别的更多相关文章

  1. os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别,终于弄清楚了

    os.getcwd().sys.path[0].sys.argv[0]和__file__的区别 要分清这几个的区别与使用条件,实际测试一下是最准确的. 设计测试方法: 一个主模块用来运行,一个子模块用 ...

  2. dirname(__FILE__) === __DIR__

    dirname(__FILE__) === __DIR__get_class($this) == __CLASS__

  3. php -- 取路径:getcwd()、__DIR__、__FILE__ 的区别

    getcwd() :显示是 在哪个文件里调用此文件 的目录 __DIR__ :当前内容写在哪个文件就显示这个文件目录 __FILE__ : 当前内容写在哪个文件就显示这个文件目录+文件名

  4. 获取PHP文件绝对地址$_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别

    通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP 文件的完整路径(绝对路径)与文件名: <?php echo 'SCRIPT_F ...

  5. PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别 有点像static 和 self的意思 !

    PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP ...

  6. PHP dirname() 函数 __FILE__ __DIR__

    __DIR__返回文件所处的目录,除非是根目录,否则末尾不带\ __FILE__ 返回文件路径 dirname(__DIR__) 文件所处目录的上级目录,末尾也不带斜杠

  7. getcwd()和dirname(__FILE__)的区别

    我个人理解:getcwd()会随着包含文件的改变而改变,而dirname(__FILE__)不会.即 getcwd() 表示获取当前执行文件的物理路径. 如 getcwd()显示: /www/proj ...

  8. PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别

    $_SERVER['SCRIPT_FILENAME']          -------> 当前执行程序的绝对路径及文件名__FILE__                             ...

  9. php$_SERVER['SCRIPT_NAME']和__FILE__的区别

    $_SERVER['SCRIPT_FILENAME']          -------> 当前执行程序的绝对路径及文件名__FILE__                             ...

随机推荐

  1. 在C#中GUID生成的四种格式

    var uuid = Guid.NewGuid().ToString(); // 9af7f46a-ea52-4aa3-b8c3-9fd484c2af12 var uuidN = Guid.NewGu ...

  2. 架构设计---soa与msa的概念(转)

    https://blog.csdn.net/qq_15001229/article/details/79535037

  3. python3.*的一些笔记

    因为使用python越来越频繁,有一些细节的东西经常用后一段时间没去用就会忘记,做些简单的笔记吧. 1.break和continue和pass a = 0 while 1: a+=1 if(a%3== ...

  4. 装饰者模式 Decorator

    项目:咖啡计费系统 背景:现有系统中有一个抽象类Beverage,有2个抽象方法GetDescription和Cost. namespace DecoratorPattern { /// <su ...

  5. linux 查看CPU、内存、磁盘信息命令

    [1]查看CPU信息 (1)查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c (2)查看物理CPU个数 cat /pr ...

  6. Linux基础命令---top显示进程信息

    top top指令用来显示Linux的进程信息,这是一个动态显示的过程.top提供运行系统的动态实时视图.它可以显示系统摘要信息以及当前由Linux内核管理的任务列表.所显示的系统摘要信息的类型以及为 ...

  7. Swagger结合mustache模板生成后台接口代码、以及前后台建模代码

    之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...

  8. Liunx网络技术管理及进程管理

    Linux网络技术管理及进程管理(week2_day4)   OSI七层模型和TCP/IP四层模型 OSI七层模型:OSI(Open System Interconnection)开放系统互连参考模型 ...

  9. 【题解】Luogu P5313 僕たちはひとつの光([Ynoi2012]D2T2)

    原题传送门 lovelive好评 比赛时只拿到了60pts,还是自己太菜了 这题的思想实际有点像Luogu P3674 小清新人渣的本愿与Luogu P5071 [Ynoi2015]此时此刻的光辉 这 ...

  10. 汇编笔记-DOSBox安装和使用(转载)

    我自己安装使用在Windwos10下面. [DOSBox简介] 1. 官方网址:http://www.dosbox.com/. 2. debug功能在win7之后系统已经不自带了,即64位系统是不能直 ...