关于define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));的理解

define('DISCUZ_ROOT',  substr(dirname(__FILE__), 0, -7));
得到网站根目录
对于上面这语句一直不理解是什么意思,查了相关资料有点了结

首先:这个语句由  define(), substr(), dirname()三个函数组成

1. define()
定义和用法 define() 函数定义一个常量。常量类似变量,不同之处在于:

  • 在设定以后,常量的值无法更改
  • 常量名不需要开头的美元符号 ($)
  • 作用域不影响对常量的访问
  • 常量值只能是字符串或数字

语法define(name,value,case_insensitive)                        参数            描述                            name            必需。规定常量的名称。                            value            必需。规定常量的值。                            case_insensitive

必需。规定常量的名称是否对大小写敏感。

若设置为 true,则对大小写不敏感。默认是 false(大小写敏感)。

注:第三个参数也是今天看了函数原型学到的,define也可以设置大小写的敏感。

2.dirname(path )
定义和用法 path 参数是一个包含有指向一个文件的全路径的字符串。该函数返回去掉文件名后的目录名。
语法string dirname ( string path )                                                                                    
                            参数        
                                         描述             
                                          path   
                           必需。规定要检查的路径。             
例子<?php
echo dirname("c:/testweb/home.php");
echo dirname("/testweb/home.php");
?>

输出:

c:/testweb
/testweb
3.substr( ) 函数        
定义和用法substr() 函数返回字符串的一部分 
语法string substr     ( string $string    , int $start    [, int $length   ] )                                                      

参数        
描述                            string            必需。规定要返回其中一部分的字符串。                            start

必需。规定在字符串的何处开始。

  • 正数 - 在字符串的指定位置开始
  • 负数 - 在从字符串结尾的指定位置开始
  • 0 - 在字符串中的第一个字符处开始

charlist

可选。规定要返回的字符串长度。默认是直到字符串的结尾。

  • 正数 - 从 start 参数所在的位置返回
  • 负数 - 从字符串末端返回

注释:如果 start 是负数且 length 小于等于 start,则length为 0

4.__FILE__

__FILE__的路径是当前代码所在文件(而不是url所在  文件)完整路径,所以定义配置文件通常要放在根目录下定义网站的根地址

define('DISCUZ_ROOT',  substr(dirname(__FILE__), 0, -7));

假设 __FILE__为 /home/web/include/common.php
因此
dirname(__FILE__)的返回值就是/home/web/include

substr(dirname(__FILE__), 0, -7))的返回值就是/home/web/

define('DISCUZ_ROOT',  substr(dirname(__FILE__), 0, -7));  
就是定义常理DISCUZ_ROOT的值为/home/web/

为什么是-7呢??? 
对,因为他们都恰好在include文件夹内,数数字母个数,恰好是7个... 
这样定义的常量正好就是根目录的绝对地址了.... 

关于define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));的理解的更多相关文章

  1. substr(dirname(__FILE__))

    这是discuz中定义论坛安装根目录的一个常量.现在我们就来分析一下这个很简单但是非常实用的常量.     define('DISCUZ_ROOT', substr(dirname(__FILE__) ...

  2. PHP获取文件目录dirname(__FILE__),getcwd()

    以discuz x2.5为例 D:/www/upload2.5/test.php D:/www/upload2.5/source/class/class_test.php test.php文件如下 & ...

  3. PHP中define()和dirname(__FILE__)

    1,define() 函数定义一个常量.常量类似变量,不同之处在于: (1)在设定以后,常量的值无法更改 (2)常量名不需要开头的美元符号 ($) (3)作用域不影响对常量的访问 (4)常量值只能是字 ...

  4. time()函数,dirname(__FILE__) 的使用总结

    time()函数将返回从1970-1-1 0:0:0到当前时间的秒数.(整型) dirname(__FILE__) php中定义了一个很有用的常数,即 __file__ 这个内定常数是当前php程序的 ...

  5. PHP 常量dirname(__file__)

    PHP 常量dirname(__FILE__)取得当前文件的绝对路径. define('ROOT_PATH', str_replace('includes/2.php', '', str_replac ...

  6. os.path.dirname(__file__)使用

    os.path.dirname(__file__)使用 该测试脚本所在的位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py test11.py import os #该文件所在位置 ...

  7. os.path.dirname(__file__)

    os.path.dirname(__file__) 返回脚本的路径 描述: 必须实际存在的.py文件,如果直接在命令行执行,则会引发异常NameError: name 'file' is not de ...

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

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

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

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

随机推荐

  1. IAR建立stm32工程

    stm32是一个当下非常流行的微控制器,很多人都加入了学习stm32的行列中,常用的stm32编译器有IAR和mdk两种,接下来是利用stm32固件库3.5在IAR下的建立的工程模板历程: 1.在常用 ...

  2. 用Jmeter做性能测试,之后报表展示

    https://octoperf.com/blog/2017/10/19/how-to-analyze-jmeter-results/ 看到性能测试平台的开发,我在想需要什么功能,报表需要什么样子的 ...

  3. <你们都是魔鬼吗>第二次团队作业:团队项目选题

    第二次团队作业:团队项目选题 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 任务1: 团队初选项目可行性自评,使用 ...

  4. JQgrid处理json数据

    jqGrid 实例中文版网址:http://blog.mn886.net/jqGrid/国外官网:http://www.trirand.com/blog/jqgrid/jqgrid.html http ...

  5. git如何利用分支进行多人开发

    在使用git时,假如远程仓库有 dev 和 master 两个分支,master 作为一个稳定版分支,可用于直接发布产品,日常的开发则 push 到 dev 分支,那本地是不是要从 dev 分支中创建 ...

  6. javax.persistence.TransactionRequiredException: Executing an update/delete query

    最近在springboot中整合jpa的时候碰到一个异常,异常如下 javax.persistence.TransactionRequiredException: Executing an updat ...

  7. MySQL数据库导入到SQL Server

    EXEC master.dbo.sp_addlinkedserver @server = N'MYSQL2', @srvproduct=N'mySQL', @provider=N'MSDASQL', ...

  8. P/NP问题

    目录 P NP NPC NPH 写在开头 1.多项式 如公式:y = axn-bxn-1+c.Ο(log2n).Ο(n). Ο(nlog2n).Ο(n2)和Ο(n3)称为多项式时间.Ο(2n)和Ο(n ...

  9. docker 部署nestjs应用

    搭建nodejs运行环境,使用了node容器运行 1.安装运行node image docker pull node:latest docker run -itd --name mynode node ...

  10. Python基础之各种推导式玩法

    一.推导式套路 除了我们之前所学习的列表推导式和生成器表达式之外,还有字典推导式.集合推导式等等. 下面就是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式. variable = [out ...