很多开源软件开头都有一句类似 define('EmpireCMSAdmin','1'); 是什么意思

2017-11-22 13:56:59 +08:00
 shaweren

define('EmpireCMSAdmin','1'); defined('DT_ADMIN') or exit('Access Denied'); define('MANAGE_ADMIN', true);

原理是什么

3488 次点击
所在节点    PHP
4 条回复
zgx030030
2017-11-22 14:10:17 +08:00
就是定义一个常量啊... 其它地方检查这个值,如果有定义,就怎样怎样,如果没定义,就怎样怎样。比如你例子中的 DT_ADMIN 这句 是 destoon 后台的一些 php 头部的一句,这个常量只在入口处定义,这样就防止了这些 php 绕过入口而被直接访问的情况.....
Junjunya
2017-11-22 15:23:47 +08:00
就如楼上所说
这样做是防止了 php 文件 绕过入口而被直接访问的情况
一般会在入口文件 比如 index.php 定义一句 define('DT_ADMIN','1');
这样 你如果直接访问其他文件 比如 /aa/a.php
会在 defined('DT_ADMIN') or exit('Access Denied'); 这一句被截断 无法继续运行下面的代码
yongjing
2017-11-22 15:37:14 +08:00
帝国 cms ?
littlehz
2017-11-22 20:10:57 +08:00
早期的框架,index.php 是在最外层,而代码库是在 index.php 所在文件夹的子目录。如楼上几位所说,里面的文件有可能直接输入 url 访问到,导致出现一些意外情况。当年,大部分是虚拟主机,这是主流解决方案。
而现代 php 框架,index.php 入口文件一般会放在 public 独立目录,代码库放在 public 的上级平级文件夹。nginx/apache 的 webroot 指向 public 目录,输入 url 根本不可能访问到代码库文件。所以现代 php 框架很难见到这些 define 定义和 exit 判断了。现在的主流是云主机(虚拟机)和独立服务器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/408561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX