__DIR__ :当前内容写在哪个文件就显示这个文件目录

__FILE__ : 当前内容写在哪个文件就显示这个文件目录+文件名

比如文件 b.php 包含如下内容: 
<?php 
$basedir = dirname(__FILE__); 
?> 
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。 
变量$basedir 的内容还是b.php所在的那个文件夹的路径。 
而不是变成a.php文件所在的目录。 
dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。 
不会返回当前的文件名称。 
dirname(__FILE__) 也可能返回一个 . (当前目录) 
[原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下. 
比如 WEB_ROOT 为: "C:/root/www/".] 
b.php文件路径为: "C:/root/www/b.php".

使用方法提示,  
如果重复一次可以把目录往上提升一个层次: 
比如:$d = dirname(dirname(__FILE__)); 
其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/ 
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回 
当前目录的上级目录.这样重复就得到了它的上一级的目录.

包含得到上一级目录的文件 
include(dirname(__FILE__).'/../filename.php');

此行代码也等价于如下:

include(dirname(dirname(__FILE__)).'/filename.php'

dirname(__FILE__)等价于  __DIR__

在实现同样功能的情况下,dirname(__FILE__)多了一层函数调用。所以, __DIR__ 比 dirname(__FILE__) 在效率上有优势

__FILE__ 和 dirname() 函数从 PHP 4.0.2 就开始启用。

__DIR__ 变量则是 PHP5.3.0 新增的。

所以,如果你的PHP版本大于等于PHP5.3.0,建议使用 __DIR__。否则,最好还是用 dirname(__FILE__),以确保程序不会出错。

常见用法:

define('BASE_PATH',str_replace('\\','/',dirname(__FILE__)));定义当前文件路径

PHP 中的 __FILE__ 和__DIR__常量的更多相关文章

  1. [.net 面向对象编程基础] (5) 基础中的基础——变量和常量

    [.net面向对象编程基础]  (5) 基础中的基础——变量和常量 1.常量:在编译时其值能够确定,并且程序运行过程中值不发生变化的量. 通俗来说,就是定义一个不能改变值的量.既然不能变动值,那就必须 ...

  2. java程序中默认浮点形值常量是什么类型的?如何区分不同类型的浮点型整数值常量?

    java程序中默认浮点形值常量是什么类型的 默认的所有的浮点型数值都是double型

  3. 包装类Float中为什么有两个常量来表示最小值

    1)问:包装类Float中为什么有两个常量来表示最小值:MIN_VALUE和MIN_NORMAL ① MIN_VALUE:最小正非零值常量,是非规格化浮点数所能表示的最小值.值为 3.4E-45 的常 ...

  4. PHP获取绝对路径dirname(__FILE__)和__DIR__比较

    我们都知道,要获取当前PHP脚本所在目录的绝对路径,dirname(__FILE__) 和 __DIR__都可以实现.那么什么情况下用 dirname(__FILE__),什么情况下用 __DIR__ ...

  5. C语言中的数据转换和定义常量

    一.数据转换 1.数据类型转换:C 语言中如果一个表达式中含有不同类型的常量和变量,在计算时,会将它们自动转换为同一种类型:在 C 语言中也可以对数据类型进行强制转换: 2.自动转换规则: a)浮点数 ...

  6. dirname(__FILE__)与__DIR__全等

    小例子如下: <?php$the_full_name = __FILE__;$the_file = dirname(__FILE__);echo $the_full_name.'<br/& ...

  7. java 中包的概念,常量,静态与继承

    一.包的概念:创建,使用. 1.新建包: 最上面一行,之前不能再有其它代码了. package 包名; 注意:包名一般都有命名的规范.例如:com.itnba.maya.zy(从大到小). 2.使用包 ...

  8. PHP 中 define() 和 const 定义常量时的区别

    自 PHP 5.3.0 起,有两种方式定义常量,使用 const 关键字或者 define() 函数:   1 2 const FOO = 'BAR'; define('FOO', 'BAR'); 这 ...

  9. OC中修饰符:宏define 常量:const extern

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

随机推荐

  1. Libgdx 1.5.4发布,跨平台游戏开发框架

    (原文链接:http://www.libgdx.cn/topic/70/libgdx-1-5-4%E5%8F%91%E5%B8%83) [1.5.4] 添加对Titled maps 的图像层的支持. ...

  2. go-mysql,一个易用的mysql接口框架实现

    介绍 go-mysql是一个用go写的mysql driver,使用接口类似于go自身的database sql,但是稍微有一点不同,现阶段还不支持集成进go database/sql中,但实现难度并 ...

  3. C++ Primer 有感(复制控制)

    1.不管类是否定义了自己的析构函数,编译器都 自动执行类中非static数据成员的析构函数. 2.如果我们没有定义复制构造函数,编译器就会为我们合成一个.合成复制构造函数的行为是,执行逐个成员初始化, ...

  4. close()方法应该在finally语句中调用吗?

    翻译人员: 铁锚 翻译时间: 2013年12月20日 原文链接: Should .close() be put in finally block or not? 下面列出了关闭输出流(output w ...

  5. unity使用UGUI创建摇杆

    1.现在unity做一个项目,各种插件各种包,于是项目资源就无限变大了,其实一些简单的功能可以自己写,这里就是试着使用UGUI编写一个摇杆功能 2.脚本如下: using UnityEngine; u ...

  6. 传输控制协议(TCP) -- 连接建立及终止过程

    TCP简介 相对于不可靠.无连接的用户数据报协议(User Datagram Protocol, UDP),传输控制协议(Transmission Control Protocol, TCP)是可靠的 ...

  7. 【cocos 2d-x】VS2013+cocos2d-x3.3Final+Adriod交叉编译环境配置(超详细版)

    本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.com ...

  8. 打开Visual Studio 2010,左下角显示正在从包...加载工具箱内容,卡住5、6秒!!!

    在VS2010命令提示符用 devenv /ResetSkipPkgs 或者 devenv /ResetSettings

  9. 【freeradius3】安装和拓展需求

    这次主要来看看 freeradius的安装,以及Python拓展的例子,还有计费字段根据厂家进行拓展. 3.0版本的安装 参考文章 yum install libtalloc-devel wget - ...

  10. Shell Scripts - 条件语句,case语句,function功能

    修改之前的代码 1.判断 $1 是否为 hello,如果是的话,就显示 "Hello, how are you ?":     2.如果没有加任何参数,就提示使用者必须要使用的参数 ...