第三天 入口文件index.php 02

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:
 
  1. <?php 
  2.  
  3.    if($whosonlinestatus == 1 || $whosonlinestatus == 3) {   //显示在线情况 
  4.         $whosonlinestatus = 1
  5.  
  6.         $onlineinfo = explode("\t", $onlinerecord);        //$onlineinfo变量,$onlinerecord来自index.php的extract($_DCACHE)处理 
  7.         if(empty($_DCOOKIE['onlineusernum'])) { 
  8.             $onlinenum = $db->result_first("SELECT COUNT(*) FROM {$tablepre}sessions");  //在线人数 
  9.             if($onlinenum > $onlineinfo[0]) {    //如果当前数据库中取得的在线人数大于原来在线人数,则更新$onlinerecord 
  10.                 $_DCACHE['settings']['onlinerecord'] = $onlinerecord = "$onlinenum\t$timestamp"
  11.                 $db->query("UPDATE {$tablepre}settings SET value='$onlinerecord' WHERE variable='onlinerecord'");    //同时更新settings表 
  12.                 require_once DISCUZ_ROOT.'./include/cache.func.php'; 
  13.                 updatesettings();   //更新settings缓存 
  14.                 $onlineinfo = array($onlinenum, $timestamp);    //更新$onlineinfo数组 
  15.             } 
  16.             dsetcookie('onlineusernum', intval($onlinenum), 300);    //将在线人数写入cookie 
  17.         } else { 
  18.             $onlinenum = intval($_DCOOKIE['onlineusernum']);    //如果cookie中在线人数不为空,直接读出 
  19.         } 
  20.         $onlineinfo[1] = gmdate($dateformat, $onlineinfo[1] + ($timeoffset * 3600));    //更新在线情况的时间戳 
  21.  
  22.         $detailstatus = $showoldetails == 'yes' || (((!isset($_DCOOKIE['onlineindex']) && !$whosonline_contract) || $_DCOOKIE['onlineindex']) && $onlinenum < 500 && !$showoldetails); 
  23.         /* 
  24.          * 判断在线详情变量,这里比较复杂,仔细看一下,主要是$showoldetails == 'yes'与cookie中的首页显示啊 一些条件 
  25.          */ 
  26.         if($detailstatus) {        //以下是处理在线人数列表的 
  27.             @include language('actions');    //引用语言文件 /templates/default/actions.lang.php 
  28.  
  29.             $discuz_uid && updatesession();       //更新session 
  30.             $membercount = $invisiblecount = 0;       //初始化会员数量及隐身的数量 
  31.             $whosonline = array();    //初始化数组 
  32.  
  33.             $maxonlinelist = $maxonlinelist ? $maxonlinelist : 500;    //最大在线人数,如果未设置,初始化为500 
  34.  
  35.             $query = $db->query("SELECT uid, username, groupid, invisible, action, lastactivity, fid FROM {$tablepre}sessions ".(isset($_DCACHE['onlinelist'][7]) ? '' : 'WHERE uid <> 0')." ORDER BY uid DESC LIMIT ".$maxonlinelist); 
  36.             while($online = $db->fetch_array($query)) { 
  37.                 if($online['uid']) {   //会员 
  38.                     $membercount ++;    //会员总数 
  39.                     if($online['invisible']) {    //隐身用户 
  40.                         $invisiblecount++; 
  41.                         continue; 
  42.                     } else { 
  43.                         $online['icon'] = isset($_DCACHE['onlinelist'][$online['groupid']]) ? $_DCACHE['onlinelist'][$online['groupid']] : $_DCACHE['onlinelist'][0]; 
  44.  
  45.                          //用户组的图标 
  46.                     } 
  47.  
  48.                 } 
  49.                 else {    //游客,区别是数据表session中uid为0表示未登录的游客 
  50.                     $online['icon'] = $_DCACHE['onlinelist'][7]; 
  51.                     $online['username'] = $_DCACHE['onlinelist']['guest']; 
  52.                 } 
  53.  
  54.                 $online['fid'] = $online['fid'] ? $forumname[$online['fid']] : 0;    //用户正浏览版块 
  55.                 $online['action'] = $actioncode[$online['action']];   //用户正进行的动作 
  56.                 $online['lastactivity'] = gmdate($timeformat, $online['lastactivity'] + ($timeoffset * 3600));    //用户上次访问时间 
  57.                 $whosonline[] = $online;   //赋值给$whosonline数组 
  58.             } 
  59.             unset($actioncode, $online);    //清空两个变量 
  60.  
  61.             if($onlinenum > $maxonlinelist) {    //如果总在线人数大于最大在线人数(系统默认为500),分别取出已登录用户和隐身用户 
  62.                 $membercount = $db->result_first("SELECT COUNT(*) FROM {$tablepre}sessions WHERE uid <> '0'"); 
  63.                 $invisiblecount = $db->result_first("SELECT COUNT(*) FROM {$tablepre}sessions WHERE invisible = '1'"); 
  64.             } 
  65.  
  66.             if($onlinenum < $membercount) {   //如果总在线人数小于在线会员数,则更新cookie中的在线用户人数,注意是onlineusernum而不是onlinenum 
  67.                 $onlinenum = $db->result_first("SELECT COUNT(*) FROM {$tablepre}sessions"); 
  68.                 dsetcookie('onlineusernum', intval($onlinenum), 300); 
  69.             } 
  70.  
  71.             $guestcount = $onlinenum - $membercount; 
  72.  
  73.             $db->free_result($query);   //释放数据库连接 
  74.             /* 
  75.              * 这里复习下mysql连接后关闭的问题: 
  76.              * mysql_close() 函数关闭非持久的 MySQL 连接。通常不需要使用 mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。 
  77.              * mysql_close() 不会关闭由 mysql_pconnect() 建立的持久连接 
  78.              * mysql_pconnect() 和 mysql_connect() 非常相似,但有两个主要区别: 
  79.              * 1 、当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。 
  80.              * 2、当脚本执行完毕后到 SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由 mysql_pconnect() 建立的连接)。 
  81.              */ 
  82.              
  83.             unset($online);    //清空变量$online,可能这个变量很敏感,所以多清理下 
  84.         } 
  85.  
  86.     } else { 
  87.         $whosonlinestatus = 0;    //如果后台设置不显示在线人数,则不显示在线列表 
  88.     } 
  89. else { 
  90.     require_once DISCUZ_ROOT.'./include/category.inc.php';   //如果gid为空(指定的版块不存在,请返回)。如果是分 区显示,如url为:index.php?gid=2,则调用这个category.inc.php文件。 
  91.  
  92. include template('discuz');    //载入首页的模板文件 
  93.      
  94. ?> 

(完)



      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/882320,如需转载请自行联系原作者




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
thinkphp5.1隐藏index.php入口文件
thinkphp5.1隐藏index.php入口文件
31 0
thinkphp5.1隐藏index.php入口文件
|
11天前
|
安全 PHP 数据库
【PHP开发专栏】PHP文件包含漏洞与防范
【4月更文挑战第30天】本文探讨了PHP文件包含漏洞,该漏洞让攻击者能执行恶意代码或访问敏感信息。文章分为三部分:原理、影响和防范。文件包含函数(如`include`和`require`)在攻击者控制文件名时可能导致漏洞。影响包括执行恶意代码、泄露敏感信息和影响服务器性能。防范措施包括验证文件名安全性、使用安全包含函数、设置安全包含路径和参数,以及定期更新和维护代码及库。开发者应重视此问题,采取相应措施保障应用安全。
|
4月前
|
PHP 数据安全/隐私保护
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)