V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shaweren
V2EX  ›  PHP

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

  •  
  •   shaweren · 2017-11-22 13:56:59 +08:00 · 3602 次点击
    这是一个创建于 2558 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    原理是什么

    4 条回复    2017-11-22 20:10:57 +08:00
    zgx030030
        1
    zgx030030  
       2017-11-22 14:10:17 +08:00
    就是定义一个常量啊... 其它地方检查这个值,如果有定义,就怎样怎样,如果没定义,就怎样怎样。比如你例子中的 DT_ADMIN 这句 是 destoon 后台的一些 php 头部的一句,这个常量只在入口处定义,这样就防止了这些 php 绕过入口而被直接访问的情况.....
    Junjunya
        2
    Junjunya  
       2017-11-22 15:23:47 +08:00   ❤️ 1
    就如楼上所说
    这样做是防止了 php 文件 绕过入口而被直接访问的情况
    一般会在入口文件 比如 index.php 定义一句 define('DT_ADMIN','1');
    这样 你如果直接访问其他文件 比如 /aa/a.php
    会在 defined('DT_ADMIN') or exit('Access Denied'); 这一句被截断 无法继续运行下面的代码
    yongjing
        3
    yongjing  
       2017-11-22 15:37:14 +08:00
    帝国 cms ?
    littlehz
        4
    littlehz  
       2017-11-22 20:10:57 +08:00   ❤️ 1
    早期的框架,index.php 是在最外层,而代码库是在 index.php 所在文件夹的子目录。如楼上几位所说,里面的文件有可能直接输入 url 访问到,导致出现一些意外情况。当年,大部分是虚拟主机,这是主流解决方案。
    而现代 php 框架,index.php 入口文件一般会放在 public 独立目录,代码库放在 public 的上级平级文件夹。nginx/apache 的 webroot 指向 public 目录,输入 url 根本不可能访问到代码库文件。所以现代 php 框架很难见到这些 define 定义和 exit 判断了。现在的主流是云主机(虚拟机)和独立服务器。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:47 · PVG 11:47 · LAX 19:47 · JFK 22:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.