Heim Backend-Entwicklung PHP-Tutorial Discuz7 php源码,该如何解决

Discuz7 php源码,该如何解决

Jun 13, 2016 am 10:51 AM
amp discuz http quot

Discuz7 php源码
谁有比较完整的Discuz7源码分析(目录、文件结构、各文件的功能、模板结构、较完整的代码注释等),越全越好,谢谢?

------解决方案--------------------

PHP code
<?php /*[Discuz!] (C)2001-2009 Comsenz Inc.This is NOT a freeware, use is subject to license terms$Id: common.inc.php 17460 2008-12-24 01:46:38Z monkey $*///关闭magic_quotes_gpc  引用 ,设置关闭PHP错误报告error_reporting(0);set_magic_quotes_runtime(0);//获取脚本开始的时间,最后有脚本结束时间减去这个就会得到整个脚本运行的时间$mtime = explode(' ', microtime());$discuz_starttime = $mtime[1] + $mtime[0];//设置一些常量//SYSY_DEBUG是当前是否是调试状态//IN_DISCUZ是在一些不允许直接浏览的页面用的,如果直接浏览这些页面,就会退出并出现Access Denied//DISCUZ_ROOT是获取当前的论坛的主目录的绝对路径//MAGIC_QUOTES_GPC 是 当前的magic_quotes_gpc的状态//CURSCRIPT是当前运行的脚本的名称吧...现在设置为空...在其他脚本中会有值....define('SYS_DEBUG', FALSE);define('IN_DISCUZ', TRUE);define('DISCUZ_ROOT', substr(dirname(__FILE__), 0, -7));define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());!defined('CURSCRIPT') && define('CURSCRIPT', '');//为了兼容性if(PHP_VERSION < '4.1.0') {$_GET = &$HTTP_GET_VARS;$_POST = &$HTTP_POST_VARS;$_COOKIE = &$HTTP_COOKIE_VARS;$_SERVER = &$HTTP_SERVER_VARS;$_ENV = &$HTTP_ENV_VARS;$_FILES = &$HTTP_POST_FILES;}//为了安全性...因为脚本运行到这里之前这两个global数组是不会被定义的...if (isset($_REQUEST['GLOBALS']) OR isset($_FILES['GLOBALS'])) {exit('Request tainting attempted.');}//包含论坛的函数库...这个函数库里面有几乎整个论坛需要用到的函数require_once DISCUZ_ROOT.'./include/global.func.php';//测试下浏览者是什么玩意...是不是ROBOT是的话就退出显示403....getrobot();if(defined('NOROBOT') && IS_ROBOT) {exit(header("HTTP/1.1 403 Forbidden"));}//获取$_COOKIE  等等的值然后 设置里面的key为一个变量,值为其对应的值并添加引用....//比如说有$_COOKIE['discuz_auth']  = '123456' 就设置$discuz_auth = '123456'//以此类推foreach(array('_COOKIE', '_POST', '_GET') as $_request) {foreach($$_request as $_key => $_value) {  $_key{0} != '_' && $$_key = daddslashes($_value);}}//过滤$_FILES,也就是添加引用if (!MAGIC_QUOTES_GPC && $_FILES) {$_FILES = daddslashes($_FILES);}//初始化一些变量$charset = $dbs = $dbcharset = $forumfounders = $metakeywords = $extrahead = $seodescription = $mnid = '';$plugins = $hooks = $admincp = $jsmenu = $forum = $thread = $language = $actioncode = $modactioncode = $lang = array();$_DCOOKIE = $_DSESSION = $_DCACHE = $_DPLUGIN = $advlist = array();//包含论坛的配置文件require_once DISCUZ_ROOT.'./config.inc.php';//$urlxssdefend是论坛访问页面防御开关,可避免用户通过非法的url地址对本站用户造成危害if($urlxssdefend && !empty($_SERVER['REQUEST_URI'])) {$temp = urldecode($_SERVER['REQUEST_URI']);if(strpos($temp, ' $val) {if(substr($key, 0, $prelength) == $cookiepre) {  $_DCOOKIE[(substr($key, $prelength))] = MAGIC_QUOTES_GPC ? $val : daddslashes($val);}}//销毁这些变量,都是对$_类数组操作用到的一些变量unset($prelength, $_request, $_key, $_value);//$inajax = !empty($inajax);$handlekey = !empty($handlekey) ? htmlspecialchars($handlekey) : '';$timestamp = time();//$attackevasive 论坛防御级别,可防止大量的非正常请求造成的拒绝服务攻击if($attackevasive && CURSCRIPT != 'seccode') {require_once DISCUZ_ROOT.'./include/security.inc.php';}//包含数据库类 的文件require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';//$PHP_SELF为当前活动的脚本相对于网站主目录的路径//$BASESCRIPT为当前活动的脚本文件名字带扩展名//$BASEFILENAME为当前活动的脚本文件的名字不带扩展名//$boardurl为当前活动脚本的全网站路径去掉后面文件名,如果有api|archiver|wap文件夹就去掉...$PHP_SELF = dhtmlspecialchars($_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']);$BASESCRIPT = basename($PHP_SELF);list($BASEFILENAME) = explode('.', $BASESCRIPT);$boardurl = htmlspecialchars('http://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api|archiver|wap)?\/*$/i", '', substr($PHP_SELF, 0, strrpos($PHP_SELF, '/'))).'/');//获得当前浏览者IPif(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {$onlineip = getenv('HTTP_CLIENT_IP');} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {$onlineip = getenv('HTTP_X_FORWARDED_FOR');} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {$onlineip = getenv('REMOTE_ADDR');} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {$onlineip = $_SERVER['REMOTE_ADDR'];}preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches);$onlineip = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';unset($onlineipmatches);//include     settings的缓存 并且将里面的数组给extract了不懂的看这个函数解释...我不罗嗦了...$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';@extract($_DCACHE['settings']);//如果开启了GZIP压缩并且服务器有这个功能//并且当前脚本不是wap和attachment//并且inajax为FLASE//就ob_start('ob_gzhandler')否则就ob_start();if($gzipcompress && function_exists('ob_gzhandler') && !in_array(CURSCRIPT, array('attachment', 'wap')) && !$inajax) {ob_start('ob_gzhandler');} else {$gzipcompress = 0;ob_start();}//平衡负载用的,$loadctrl我不知道在哪里..汗一个if(!empty($loadctrl) && substr(PHP_OS, 0, 3) != 'WIN') {if($fp = @fopen('/proc/loadavg', 'r')) {  list($loadaverage) = explode(' ', fread($fp, 6));  fclose($fp);  if($loadaverage > $loadctrl) {   header("HTTP/1.0 503 Service Unavailable");   include DISCUZ_ROOT.'./include/serverbusy.htm';   exit();  }}}//包含其他的缓存文件if(in_array(CURSCRIPT, array('index', 'forumdisplay', 'viewthread', 'post', 'topicadmin', 'register', 'archiver'))) {$cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/cache_'.CURSCRIPT.'.php') ? '' : ' '.CURSCRIPT;}//连接数据库,完毕之后设置这些值为NULL$db = new dbstuff;$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);$dbuser = $dbpw = $pconnect = $sdb = NULL;//乱七八糟的 ,反正就是找到了需要的sid并过滤了就是了 $transsidstatus我也没找到在哪//看看是不是后台设置了通过sid传输的那个东东,还有是不是通过wap访问的,//还有是不是有sid这个东东在$_GET或$_POST这两个的任何一个中,//以上结论都成立的话从GET中获得sid,不成立的话从$_DCOOKIE中获得。$sid = daddslashes(($transsidstatus || CURSCRIPT == 'wap') && (isset($_GET['sid']) || isset($_POST['sid'])) ?(isset($_GET['sid']) ? $_GET['sid'] : $_POST['sid']) :(isset($_DCOOKIE['sid']) ? $_DCOOKIE['sid'] : ''));//如果当前脚本是attachment         sid是通过GET方式获得就加密然后过滤它CURSCRIPT == 'attachment' && isset($_GET['sid']) && $sid = addslashes(authcode($_GET['sid'], 'DECODE', $_DCACHE['settings']['authkey']));//设置一个$discuz_auth_key,md5加密。。$discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);//获得$discuz_pw, $discuz_secques, $discuz_uid这三个变量,分别对应密码,提示问题和uid。//强制过滤了这3个值list($discuz_pw, $discuz_secques, $discuz_uid) = empty($_DCOOKIE['auth']) ? array('', '', 0) : daddslashes(explode("\t", authcode($_DCOOKIE['auth'], 'DECODE')), 1);//第一行是初始化变量用的(无论何时用变量都要考虑初始化,要不然安全性不值得一提)//接下来是判断是不是有sid,有的话就从cdb_session表中取来,然后连接一下cdb_members表取出东西//在$membertablefields这个变量里面已经全面写出来了//标记了一个sessionexist变量,表示这个会员是在线的。$prompt = $sessionexists = $seccode = 0;$membertablefields = 'm.uid AS discuz_uid, m.username AS discuz_user, m.password AS discuz_pw, m.secques AS discuz_secques,m.adminid, m.groupid, m.groupexpiry, m.extgroupids, m.email, m.timeoffset, m.tpp, m.ppp, m.posts, m.digestposts,m.oltime, m.pageviews, m.credits, m.extcredits1, m.extcredits2, m.extcredits3, m.extcredits4, m.extcredits5,m.extcredits6, m.extcredits7, m.extcredits8, m.timeformat, m.dateformat, m.pmsound, m.sigstatus, m.invisible,m.lastvisit, m.lastactivity, m.lastpost, m.prompt, m.accessmasks, m.editormode, m.customshow, m.customaddfeed';if($sid) {if($discuz_uid) {  $query = $db->query("SELECT s.sid, s.styleid, s.groupid='6' AS ipbanned, s.pageviews AS spageviews, s.lastolupdate, s.seccode, $membertablefields   FROM {$tablepre}sessions s, {$tablepre}members m   WHERE m.uid=s.uid AND s.sid='$sid' AND CONCAT_WS('.',s.ip1,s.ip2,s.ip3,s.ip4)='$onlineip' AND m.uid='$discuz_uid'   AND m.password='$discuz_pw' AND m.secques='$discuz_secques'");} else {  $query = $db->query("SELECT sid, uid AS sessionuid, groupid, groupid='6' AS ipbanned, pageviews AS spageviews, styleid, lastolupdate, seccode   FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");}if($_DSESSION = $db->fetch_array($query)) {  $sessionexists = 1;  if(!empty($_DSESSION['sessionuid'])) {   $_DSESSION = array_merge($_DSESSION, $db->fetch_first("SELECT $membertablefields    FROM {$tablepre}members m WHERE uid='$_DSESSION[sessionuid]'"));  }} else {  if($_DSESSION = $db->fetch_first("SELECT sid, groupid, groupid='6' AS ipbanned, pageviews AS spageviews, styleid, lastolupdate, seccode   FROM {$tablepre}sessions WHERE sid='$sid' AND CONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'")) {   clearcookies();   $sessionexists = 1;  }}}//如果不在线执行//如果COOKIE不正确就清除//如果IP是被办的  就被办的(标记了一下)//写入一个随机值写入到SID  SECCODEif(!$sessionexists) {if($discuz_uid) {  if(!($_DSESSION = $db->fetch_first("SELECT $membertablefields, m.styleid   FROM {$tablepre}members m WHERE m.uid='$discuz_uid' AND m.password='$discuz_pw' AND m.secques='$discuz_secques'"))) {   clearcookies();  }}<div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Mar 12, 2024 pm 10:15 PM

Ein Muss für Discuz-Benutzer! Umfassende Analyse zum Umbenennen von Requisiten! Im Discuz-Forum hat die Namensänderungsfunktion seit jeher große Aufmerksamkeit und Nachfrage seitens der Nutzer erhalten. Für einige Benutzer, die ihren Namen ändern müssen, können die Namensänderungs-Requisiten den Benutzernamen leicht ändern, und dies ist auch eine interessante Art der Interaktion. Werfen wir einen detaillierten Blick auf die Umbenennungs-Requisiten in Discuz, einschließlich der Art und Weise, wie man sie erhält, wie man sie verwendet und Lösungen für einige häufig auftretende Probleme. 1. Namensverändernde Requisiten erhalten Sie in Discuz. Namensverändernde Requisiten werden normalerweise über Punkte oder den Administrator erworben

Ausführliche Erläuterung des Discuz-Registrierungsprozesses: So können Sie persönliche Daten einfach ändern Ausführliche Erläuterung des Discuz-Registrierungsprozesses: So können Sie persönliche Daten einfach ändern Mar 13, 2024 pm 12:21 PM

„Detaillierte Erläuterung des Discuz-Registrierungsprozesses: Damit Sie persönliche Informationen einfach ändern können, sind spezifische Codebeispiele erforderlich.“ Discuz ist ein leistungsstarkes Community-Forumsprogramm, das auf verschiedenen Websites häufig verwendet wird. Es bietet zahlreiche Funktionen für die Benutzerregistrierung und die Änderung persönlicher Informationen und Schnittstellen. Dieser Artikel führt Sie ausführlich in den Registrierungsprozess von Discuz ein und stellt spezifische Codebeispiele bereit, die Ihnen dabei helfen, Ihre persönlichen Daten einfach anzupassen und zu ändern. 1. Benutzerregistrierungsprozess Bei Discuz ist die Benutzerregistrierung eine der wichtigen Funktionen der Website

Lösen Sie das Problem, dass die Discuz WeChat-Freigabe nicht angezeigt werden kann Lösen Sie das Problem, dass die Discuz WeChat-Freigabe nicht angezeigt werden kann Mar 09, 2024 pm 03:39 PM

Titel: Um das Problem zu lösen, dass Discuz WeChat-Freigaben nicht angezeigt werden können, sind spezifische Codebeispiele erforderlich. Mit der Entwicklung des mobilen Internets ist WeChat zu einem unverzichtbaren Bestandteil des täglichen Lebens der Menschen geworden. Bei der Website-Entwicklung werden viele Websites WeChat-Freigabefunktionen integrieren, um das Benutzererlebnis zu verbessern und die Website-Präsenz zu erweitern, sodass Benutzer Website-Inhalte problemlos mit Moments oder WeChat-Gruppen teilen können. Allerdings kann es bei der Verwendung von Open-Source-Forumsystemen wie Discuz manchmal zu dem Problem kommen, dass WeChat-Freigaben nicht angezeigt werden können, was zu gewissen Schwierigkeiten bei der Benutzererfahrung führt.

Ausführliche Erläuterung der Schritte zum Ändern des Discuz-Domänennamens Ausführliche Erläuterung der Schritte zum Ändern des Discuz-Domänennamens Mar 11, 2024 am 11:00 AM

Detaillierte Erläuterung der Schritte zum Ändern des Discuz-Domainnamens. Bei der Entwicklung und dem Betrieb der Website müssen wir manchmal den Domainnamen des Discuz-Forums ändern Optimierung oder aus anderen Gründen. Unabhängig vom Grund ist das Ändern des Discuz-Domänennamens ein Vorgang, der eine sorgfältige Vorgehensweise erfordert. Heute werden wir die Schritte zum Ändern des Discuz-Domänennamens im Detail vorstellen und spezifische Codebeispiele bereitstellen. Schritt 1: Daten sichern Bevor Sie den Domainnamen ändern, müssen Sie zunächst sicherstellen, dass die Website

Discuz Editor: Leistungsstarkes Tool zum Bearbeiten von Webseiten Discuz Editor: Leistungsstarkes Tool zum Bearbeiten von Webseiten Mar 09, 2024 pm 06:06 PM

Discuz Editor: Ein leistungsstarkes Tool zur Webseitenbearbeitung, das spezifische Codebeispiele erfordert. Mit der Entwicklung des Internets sind die Erstellung von Websites und die Bearbeitung von Inhalten immer wichtiger geworden. Als gängiges Tool zur Webseitenbearbeitung spielt der Discuz-Editor eine wichtige Rolle bei der Website-Erstellung. Es bietet nicht nur umfangreiche Funktionen und Tools, sondern hilft Benutzern auch dabei, Inhalte bequemer zu bearbeiten und zu veröffentlichen. In diesem Artikel stellen wir die Funktionen und die Verwendung des Discuz-Editors vor und stellen einige spezifische Codebeispiele bereit, um den Lesern das Verständnis und die Verwendung zu erleichtern

Discuz Editor: ein effizientes Post-Layout-Tool Discuz Editor: ein effizientes Post-Layout-Tool Mar 10, 2024 am 09:42 AM

Discuz Editor: Ein effizientes Post-Layout-Tool Mit der Entwicklung des Internets sind Online-Foren zu einer wichtigen Plattform für die Kommunikation und den Informationsaustausch geworden. Im Forum können Nutzer nicht nur ihre Meinungen und Ideen äußern, sondern auch mit anderen diskutieren und interagieren. Bei der Veröffentlichung eines Beitrags kann ein klares und schönes Format oft mehr Leser anziehen und genauere Informationen vermitteln. Um Benutzern das schnelle Schreiben und Bearbeiten von Beiträgen zu erleichtern, wurde der Discuz-Editor ins Leben gerufen und zu einem effizienten Beitragssatz-Tool entwickelt. Disku

Wie implementiert man HTTP-Streaming mit C++? Wie implementiert man HTTP-Streaming mit C++? May 31, 2024 am 11:06 AM

Wie implementiert man HTTP-Streaming in C++? Erstellen Sie einen SSL-Stream-Socket mit Boost.Asio und der asiohttps-Clientbibliothek. Stellen Sie eine Verbindung zum Server her und senden Sie eine HTTP-Anfrage. Empfangen Sie HTTP-Antwortheader und drucken Sie sie aus. Empfängt den HTTP-Antworttext und gibt ihn aus.

Discuz-Ausnahme bei der Anmeldung bei Hintergrundkonten, wie geht man damit um? Discuz-Ausnahme bei der Anmeldung bei Hintergrundkonten, wie geht man damit um? Mar 09, 2024 pm 05:51 PM

Titel: Discuz-Hintergrundkonto-Login-Ausnahme, wie geht man damit um? Wenn Sie die Backend-Verwaltung des Discuz-Forensystems verwenden, kann es manchmal zu einer abnormalen Kontoanmeldung kommen. Dies kann verschiedene Gründe haben, darunter ein falsches Passwort, die Sperrung des Kontos, Probleme mit der Netzwerkverbindung usw. Wenn wir auf diese Situation stoßen, müssen wir das Problem durch einfache Fehlerbehebung und Bearbeitung lösen. Überprüfen Sie, ob die Kontonummer und das Passwort korrekt sind: Überprüfen Sie zunächst, ob die von Ihnen eingegebene Kontonummer und das Passwort korrekt sind. Stellen Sie beim Anmelden sicher, dass die Groß- und Kleinschreibung korrekt ist und dass das Passwort korrekt ist

See all articles