• Discuz中的关键全局变量`$_G`


    01-定义

    $_G定义在discuz_application::_init_env()函数中,是一个array对象,$_G里面保存了许多预处理信息,缓存了很多配置。
    定义文件:“\source\class\discuz\discuz_application.php” 115行,搜索“global $_G;
    具体的定义如下:

    		global $_G;
    		$_G = array(
    			'uid' => 0,
    			'username' => '',
    			'adminid' => 0,
    			'groupid' => 1,
    			'sid' => '',
    			'formhash' => '',
    			'connectguest' => 0,
    			'timestamp' => TIMESTAMP,
    			'starttime' => microtime(true),
    			'clientip' => $this->_get_client_ip(),
    			'remoteport' => $_SERVER['REMOTE_PORT'],
    			'referer' => '',
    			'charset' => '',
    			'gzipcompress' => '',
    			'authkey' => '',
    			'timenow' => array(),
    			'widthauto' => 0,
    			'disabledwidthauto' => 0,
    
    			'PHP_SELF' => '',
    			'siteurl' => '',
    			'siteroot' => '',
    			'siteport' => '',
    
    			'pluginrunlist' => !defined('PLUGINRUNLIST') ? array() : explode(',', PLUGINRUNLIST),
    
    			'config' => & $this->config,
    			'setting' => array(),
    			'member' => array(),
    			'group' => array(),
    			'cookie' => array(),
    			'style' => array(),
    			'cache' => array(),
    			'session' => array(),
    			'lang' => array(),
    
    			'fid' => 0,
    			'tid' => 0,
    			'forum' => array(),
    			'thread' => array(),
    			'rssauth' => '',
    
    			'home' => array(),
    			'space' => array(),
    
    			'block' => array(),
    			'article' => array(),
    
    			'action' => array(
    				'action' => APPTYPEID,
    				'fid' => 0,
    				'tid' => 0,
    			),
    
    			'mobile' => '',
    			'notice_structure' => array(
    				'mypost' => array('post','rate','pcomment','activity','reward','goods','at'),
    				'interactive' => array('poke','friend','wall','comment','click','sharenotice'),
    				'system' => array('system','credit','group','verify','magic','task','show','group','pusearticle','mod_member','blog','article'),
    				'manage' => array('mod_member','report','pmreport'),
    				'app' => array(),
    			),
    			'mobiletpl' => array('1' => 'touch', '2' => 'touch', '3' => 'touch', 'yes' => 'touch'),
    		);
    		$_G['PHP_SELF'] = dhtmlspecialchars($this->_get_script_url());
    		$_G['basescript'] = CURSCRIPT;
    		$_G['basefilename'] = basename($_G['PHP_SELF']);
    		$sitepath = substr($_G['PHP_SELF'], 0, strrpos($_G['PHP_SELF'], '/'));
    		if(defined('IN_API')) {
    			$sitepath = preg_replace("/\/api\/?.*?$/i", '', $sitepath);
    		} elseif(defined('IN_ARCHIVER')) {
    			$sitepath = preg_replace("/\/archiver/i", '', $sitepath);
    		}
    		if(defined('IN_NEWMOBILE')) {
    			$sitepath = preg_replace("/\/m/i", '', $sitepath);
    		}
    		$_G['isHTTPS'] = $this->_is_https();
    		$_G['scheme'] = 'http'.($_G['isHTTPS'] ? 's' : '');
    		$_G['siteurl'] = dhtmlspecialchars($_G['scheme'].'://'.$_SERVER['HTTP_HOST'].$sitepath.'/');
    
    		$url = parse_url($_G['siteurl']);
    		$_G['siteroot'] = isset($url['path']) ? $url['path'] : '';
    		$_G['siteport'] = empty($_SERVER['SERVER_PORT']) || $_SERVER['SERVER_PORT'] == '80' || $_SERVER['SERVER_PORT'] == '443' ? '' : ':'.$_SERVER['SERVER_PORT'];
    
    		if(defined('SUB_DIR')) {
    			$_G['siteurl'] = str_replace(SUB_DIR, '/', $_G['siteurl']);
    			$_G['siteroot'] = str_replace(SUB_DIR, '/', $_G['siteroot']);
    		}
    
    		$this->var = & $_G;
    
    	}
    

    具体的各成员的意义见下面两个链接:
    https://www.cnblogs.com/catyxiao/p/12777585.html
    https://baike.baidu.com/item/%24_G/4218760

    02具体的使用实例

    01-$_G['forum']['ismoderator']

    详见 https://blog.csdn.net/wenhao_ir/article/details/143388936

  • 相关阅读:
    SegNet学习笔记
    Android navigation Fragment 共享元素动画
    Docker-compose部署SonarQube服务
    [2022CISCN]初赛 复现
    怎样找外企/远程的工作
    图扑数字孪生卡车装配生产线,工业元宇宙还远么?
    IDEA自定义Maven仓库
    Linux
    GitLab存储空间满了
    多极神经元手绘图作业,多极运动神经元手绘图
  • 原文地址:https://blog.csdn.net/wenhao_ir/article/details/143391691