版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1Discuz!SectionOne:(1)./include/common.inc.phperror_reporting(0);set_magic_quotes_runtime(0);//设置Discuz开始的时间$mtime=explode('',microtime());$discuz_starttime=$mtime[1]+$mtime[0];//定义一些常量define('SYS_DEBUG',FALSE);define('IN_DISCUZ',TRUE);define('DISCUZ_ROOT',substr(dirname(__FILE__),0,-7));//获得绝对目录//通用性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;}这一段基本上就是设置一下错误报告,把magic_quotes这个sick家伙给关了,然后定一个开始的时间,这样我们在论坛底部看到的ProcessTime就是通过这个开始的时间和一个结束的时间的差来计算的,然后定义一个IN_DISCUZ为真,这个IN_DISCUZ常量的作用就是在其他inc这样的包含文件中防止被非法引用,一旦没有这个常量的话就出现AccessDenied这样的字样然后退出。然后获得Discuz运行的绝对目录。接下来是判断PHP的版本是4.1以下还是以上,因为PHP以4.1为一个分界线,在4.1以下以$HTTP_GET_VARS[‘xx’这]样的方式来得到get过来的值,而以后用$_GET来得到get过来的值,这样做的目的是为了无论是什么样PHP,都能用$_GET这样的方式得到,有通用性~!SectionTwo:require_onceDISCUZ_ROOT.'./include/global.func.php';把include/global.inc.php引用进来,这个文件是Discuz的核心函数文件,包含了Discuz用到的很多通用的函数,可以说它就define('ISROBOT',getrobot());if(defined('NOROBOT')&&ISROBOT){exit(header("HTTP/1.1403Forbidden"));}2这里是定义一个ISROBOT常量,看看浏览者是什么东东,比方说如果浏览者是一个robot那么就直接来一个403Forbidden了……define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc());isset($_REQUEST['GLOBALS'])&&exit('AccessError');foreach(array('_COOKIE','_POST','_GET')as$_request){foreach($$_requestas$_key=>$_value){$_key{0}!='_'&&$$_key=daddslashes($_value);}}(!MAGIC_QUOTES_GPC)&&$_FILES=daddslashes($_FILES);$charset=$dbcharset=$forumfounders=$metakeywords=$extrahead='';$plugins=$hooks=$admincp=array();require_onceDISCUZ_ROOT.'./config.inc.php';$prelength=strlen($cookiepre);foreach($_COOKIEas$key=>$val){if(substr($key,0,$prelength)==$cookiepre){$_DCOOKIE[(substr($key,$prelength))]=MAGIC_QUOTES_GPC?$val:daddslashes($val);}}初始化一些变量,然后引用config.inc.php这个配置文件,这样开始初始化程序的一些东西了。接下来的一个循环把$_COOKIE中的东西取出来存到$_DCOOKIE这个数组中。注意:在登陆的时候Discuz会把登陆信息存放到$_COOKIE中去。在下面一段会有取出的代unset($prelength,$_request,$_key,$_value);$timestamp=time();if($attackevasive){require_onceDISCUZ_ROOT.'./include/security.inc.php';}这一部分代码是提高安全用的,防一些非法的入侵,include/security.inc.php文件中就是这样一些检查。require_onceDISCUZ_ROOT.'./include/db_'.$database.'.class.php';$PHP_SELF=$_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:$_SERVER['SCRIPT_NAME'];$SCRIPT_FILENAME=str_replace('\\\\','/',(isset($_SERVER['PATH_TRANSLATED'])$_SERVER['PATH_TRANSLATED']:$_SERVER['SCRIPT_FILENAME']));$boardurl='http://'.$_SERVER['HTTP_HOST'].preg_replace("/\/+(api|archiver|wap)?\/*$/i",substr($PHP_SELF,0,strrpos($PHP_SELF,'/'))).'/';?'',3if(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'];}第一行是把include/db_mysql.class.php引用进来,这个文件是一个数据库的类。我觉得是不是放在这里太早了点?然后接下的作用就是得到自身的名称$PHP_SELF,自身的文件名字$SCRIPT_FILENAME,论坛的地址$boardurl,得到浏览者的一些信息,比方说ip地址,浏览器类型等等。SectionThree:preg_match("/[\d\.]{7,15}/",$onlineip,$onlineipmatches);$onlineip=$onlineipmatches[0]?$onlineipmatches[0]:'unknown';unset($onlineipmatches);$cachelost=(@includeDISCUZ_ROOT.'./forumdata/cache/cache_settings.php')?'':'settings';@extract($_DCACHE['settings']);这一段是获得./forumdata/cache/cache_settings.php(即缓存下的设置数组,并展开,方面以后的写法if($gzipcompress&&function_exists('ob_gzhandler')&&CURSCRIPT!='wap'){ob_start('ob_gzhandler');}else{$gzipcompress=0;ob_start();}检查gzip是不是打开了,打开就用ob_gzhandler,没有就用ob_start。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.0503ServiceUnavailable");includeDISCUZ_ROOT.'./include/serverbusy.htm';exit();}}4}看到了熟悉的serviceunavailable了吧?呵呵,平衡负载用的。if(defined('CURSCRIPT')&&in_array(CURSCRIPT,array('index','forumdisplay','viewthread','post','blog','pm','topicadmin','register','archiver'))){$cachelost.=(@includeDISCUZ_ROOT.'./forumdata/cache/cache_'.CURSCRIPT.'.php')?'':''.CURSCRIPT;}看看是不是index,forumdisplay,viewthread这些文件是不是缓存了,有的话把它装到$cachelost这个变量中。SectionFour:$db=newdbstuff;$db->connect($dbhost,$dbuser,$dbpw,$dbname,$pconnect);$dbhost=$dbuser=$dbpw=$dbname=$pconnect=NULL;好了,这里是初始化一个dbstull类的实例,也就是说前面的include/db_mysql.class.php在这里用上了,所以我觉得那个require_once早了点,放到这里的前面最合适了~!J下面就是连上mysql了,然后把几个配置的变量NULL掉,安全性考虑得真多,$sid=daddslashes(($transsidstatus||(defined('CURSCRIPT')&&CURSCRIPT=='wap'))&&(isset($_GET['sid'])||isset($_POST['sid']))?(isset($_GET['sid'])?$_GET['sid']:$_POST['sid']):(isset($_DCOOKIE['sid'])?$_DCOOKIE['sid']:''));看看是不是后台设置了通过sid传输的那个东东,还有是不是通过wap访问的,还有是不是有sid这个东东在$_GET或$_POST这两个的任何一个中,以上结论都成立的话从GET中获得sid,不成立的话从$_DCOOKIE中获得。$discuz_auth_key=md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);设置一个$discuz_auth_key,md5if(isset($_DCOOKIE['auth'])list($discuz_pw,authcode($_DCOOKIE['auth'],&&$_DCOOKIE['auth'])$discuz_secques,'DECODE')),1);{$discuz_uid)=daddslashes(explode("\t",if(!is_numeric($discuz_uid)||!$discuz_uid){clearcookies();}}else{list($discuz_pw,$discuz_secques,$discuz_uid)=array('','',0);}这一段是用来检查是不是$_DCOOKIE[‘auth’]存在,如果有的话就把其中存放的东西分别给$discuz_pw,$discuz_secques,$discuz_uid这三个变量,分别对应密码,提示问题和uid。SectionFive:5$newpm=$newpmexists=$sessionexists=$seccode=$bloguid=0;//初始化变量$membertablefields='m.uidASdiscuz_uid,m.usernameASdiscuz_user,m.passwordASdiscuz_pw,m.secquesASdiscuz_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.newpm,m.accessmasks,m.xspacestatus,m.editormode,m.customshow';if($sid){if($discuz_uid){$query=$db->query("SELECTs.sid,s.styleid,s.groupid='6'ASipbanned,s.pageviewsASspageviews,s.lastolupdate,s.seccode,$membertablefieldsFROM{$tablepre}sessionss,{$tablepre}membersmWHEREm.uid=s.uidANDs.sid='$sid'ANDCONCAT_WS('.',s.ip1,s.ip2,s.ip3,s.ip4)='$onlineip'ANDm.uid='$discuz_uid'ANDm.password='$discuz_pw'ANDm.secques='$discuz_secques'");}else{$query=$db->query("SELECTsid,uidASsessionuid,groupid,groupid='6'ASipbanned,pageviewsASspageviews,styleid,lastolupdate,seccodeFROM{$tablepre}sessionsWHEREsid='$sid'ANDCONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");}if($_DSESSION=$db->fetch_array($query)){$sessionexists=1;if(!empty($_DSESSION['sessionuid'])){$query=$db->query("SELECT$membertablefieldsFROM{$tablepre}membersmWHEREuid='$_DSESSION[sessionuid]'");$_DSESSION=array_merge($_DSESSION,$db->fetch_array($query));}}else{$query=$db->query("SELECTsid,groupid,groupid='6'ASipbanned,pageviewsASspageviews,styleid,lastolupdate,seccodeFROM{$tablepre}sessionsWHEREsid='$sid'ANDCONCAT_WS('.',ip1,ip2,ip3,ip4)='$onlineip'");if($_DSESSION=$db->fetch_array($query)){clearcookies();$sessionexists=1;}}}6接下来是判断是不是有sid,有的话就从cdb_session表中取来,然后连接一下cdb_members表取出一些更具体的东西,具体是哪些东西?在$membertablefields这个变量里面已经全面写出来了,对应数据库看吧,不看的话用英语猜猜得出的。。。在这里Discuz标记了一个sessionexist变量,表示这个会员是在线的。if(!$sessionexists){if($discuz_uid){$query=$db->query("SELECT$membertablefieldsFROM{$tablepre}membersmWHEREm.uid='$discuz_uid'ANDm.password='$discuz_pw'ANDm.secques='$discuz_secques'");if(!($_DSESSION=$db->fetch_array($query))){clearcookies();}}要是不存在sid,不存在discuz_uid,那就肯定没有登陆了,清掉cookie,要是有$discuz_uid的话,还是从members表中取出信息存放到$_DSESSION数组中if(ipbanned($onlineip))$_DSESSION['ipbanned']=1;$_DSESSION['sid']=random(6);$_DSESSION['seccode']=random(6,1);}$_DSESSION['dateformat']=empty($_DSESSION['dateformat'])$_DSESSION['dateformat'];$_DSESSION['timeformat']=empty($_DSESSION['timeformat'])($_DSESSION['timeformat']==1?'h:iA':'H:i');?$_DCACHE['settings']['dateformat']?$_DCACHE['settings']['timeformat']::$_DSESSION['timeoffset']=isset($_DSESSION['timeoffset'])&&$_DSESSION['timeoffset']!=9999?$_DSESSION['timeoffset']:$_DCACHE['settings']['timeoffset'];这个是判断ip是不是在被阻止的list里,是的话就标记一下,用$_DSESSION[‘ipbanned’]标记的。再把一个随机的sid和seccode写到$_DSESSION数组。然后接下来是把日期,时间,时差写入$_DSESSION这个变量。$membertablefields='';@extract($_DSESSION);$lastvisit=empty($lastvisit)?$timestamp-86400:$lastvisit;$timenow=array('time'=>gmdate("$dateformat$timeformat",$timestamp+3600*$timeoffset),'offset'=>($timeoffset>=0?($timeoffset==0?'':'+'.$timeoffset):$timeoffset));if(PHP_VERSION>'5.1'){@date_default_timezone_set('Etc/GMT'.($timeoffset>0?'-':'+').(abs($timeoffset)));}又见变量初始化,然后是把$_DESSION给展开,这样方便多了。接下来判断是不是有上次访问的时间,有的话就没事,没有的话就减去7SectionSix:$accessadd1=$accessadd2=$modadd1=$modadd2='';if(empty($discuz_uid)||empty($discuz_user)){$discuz_user=$extgroupids='';$discuz_uid=$adminid=$posts=$digestposts=$pageviews=$oltime=$invisible=$credits=$extcredits1=$extcredits2=$extcredits3=$extcredits4=$extcredits5=$extcredits6=$extcredits7=$extcredits8=0;$groupid=empty($groupid)||$groupid!=6?7:6;}else{$discuz_userss=$discuz_user;$discuz_user=addslashes($discuz_user);if($accessmasks){$accessadd1=',a.allowview,a.allowpost,a.allowreply,a.allowgetattach,a.allowpostattach';$accessadd2="LEFTJOIN{$tablepre}accessaONa.uid='$discuz_uid'ANDa.fid=f.fid";}if($adminid==3){$modadd1=',m.uidASismoderator';$modadd2="LEFTJOIN{$tablepre}moderatorsmONm.uid='$discuz_uid'ANDm.fid=f.fid";}}if($errorreport==2||($errorreport==1&&$adminid>0)){error_reporting(E_ERROR|E_WARNING|E_PARSE);}首先初始化变量,然后看看$discuz_user$和$discuz_user这两个变量是不是存在,不存在的话一系列的变量全部置0(没登陆当然不存在版主权限管理员什么的),存在的话就来两个赋值,这就是为什么在DiscuzUserGuide里面说$discuz_userss是没有过滤的,而$discuz_user是过滤掉的,能直接进行数据库操作的。PHP你的管理员的话,Discuz给的是一个更高的错误显示级别!define('FORMHASH',formhash());$statstatus&&require_onceDISCUZ_ROOT.'./include/counter.inc.php';$extra=isset($extra)&&@preg_match("/^[&=;a-z0-9]+$/i",$extra)?$extra:'';$tpp=intval(empty($_DSESSION['tpp'])?$topicperpage:$_DSESSION['tpp']);$ppp=intval(empty($_DSESSION['ppp'])?$postperpage:$_DSESSION['ppp']);这一段定义一个formhash,这个是通过global.func.php这个文件中的formhash()函数来的。然后看是不是要等到统计信息,要的话就引用./include/counter.inc.php这个文件,不要的话当然就不引用了。$tpp-threadsperpage每页的帖子数$ppp-postsperpage每页的回复数8$rsshead=$navtitle=$navigation='';$_DSESSION['groupid']=$groupid=empty($ipbanned)?(empty($groupid)?7:intval($groupid)):6;if(!@includeDISCUZ_ROOT.'./forumdata/cache/usergroup_'.$groupid.'.php'){$query=$db->query("SELECTtypeFROM{$tablepre}usergroupsWHEREgroupid='$groupid'");$grouptype=$db->result($query,0);if(!empty($grouptype)){$cachelost.='usergroup_'.$groupid;}else{$grouptype='member';}}if($passport_status&&($passport_status!='shopex'||!$passport_shopex)){$passport_forward=rawurlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);$link_login=$passport_url.$passport_login_url.(strpos($passport_login_url,'?')===FALSE?'?':'&').'forward='.$passport_forward;$link_logout=$passport_url.$passport_logout_url.(strpos($passport_logout_url,'?')===FALSE?'?':'&').'forward='.$passport_forward;$link_register=$passport_url.$passport_register_url.(strpos($passport_register_url,'?')===FALSE?'?':'&').'forward='.$passport_forward;}else{$link_login='logging.php?action=login';$link_logout='logging.php?action=logout&formhash='.FORMHASH;$link_register='register.php';}Discuz通行证用的。主要就是得到一些应用程序的地址。if($discuz_uid&&$_DSESSION){if(!empty($groupexpiry)&&$groupexpiry<$timestamp&&(!defined('CURSCRIPT')||(CURSCRIPT!='wap'&&CURSCRIPT!='member'))){dheader("Location:{$boardurl}member.php?action=groupexpiry");}elseif($grouptype&&$groupid!=getgroupid($discuz_uid,array('type'=>$grouptype,'creditshigher'=>$groupcreditshigher,'creditslower'=>$groupcreditslower),$_DSESSION)){@extract($_DSESSION);$cachelost.=(@includeDISCUZ_ROOT.'./forumdata/cache/usergroup_'.intval($groupid).'.php')?'':'usergroup_'.$groupid;}}9这一段用来判断你的用户组是不是过期了的,如果过期了很不幸,就被告知用户组过期了。接下来如果没有过期的话就再展开一下$_DSESSION,因为此时的$_DSESSION包含了更多的东西了。SectionSeven:if(!in_array($adminid,array(1,2,3))){$alloweditpost=$alloweditpoll=$allowstickthread=$allowmodpost=$allowdelpost=$allowmassprune=$allowrefund=$allowcensorword=$allowviewip=$allowbanip=$allowedituser=$allowmoduser=$allowbanuser=$allowpostannounce=$allowviewlog=$disablepostctrl=$supe_allowpushthread=0;}elseif(isset($radminid)&&$adminid!=$radminid&&$adminid!=$groupid){$cachelost.=(@includeDISCUZ_ROOT.'./forumdata/cache/admingroup_'.intval($adminid).'.php')?'':'admingroup_'.$groupid;}这里是权限判断,如果你不是admin,moderator,supermoderator,那么你的什么权限都没。。。$forum=array();$auditstatuson=!empty($mod)&&$mod=='edit'&&in_array($adminid,array(1,2,3))&&$allowmodpost?true:false;$tid=isset($tid)&&is_numeric($tid)?$tid:0;$fid=isset($fid)&&is_numeric($fid)?$fid:0;$typeid=isset($typeid)?intval($typeid):0;if(!empty($tid)||!empty($fid)){if(empty($tid)){$query=$db->query("SELECTf.fid,f.*,ff.*$accessadd1$modadd1,f.fidASfidFROM{$tablepre}forumsfLEFTJOIN{$tablepre}forumfieldsffONff.fid=f.fid$accessadd2$modadd2WHEREf.fid='$fid'");$forum=$db->fetch_array($query);}else{$query=$db->query("SELECTt.tid,t.closed,".(defined('SQL_ADD_THREAD')?SQL_ADD_THREAD:'')."f.*,ff.*$accessadd1$modadd1,f.fidASfidFROM{$tablepre}threadstINNERJOIN{$tablepre}forumsfONLEFTJOIN{$tablepre}forumfieldsWHEREt.tid='$tid'".($auditstatuson$forum=$db->fetch_array($query);$tid=$forum['tid'];}f.fid=t.fidffONff.fid=f.fid$accessadd2$modadd2?'':"ANDt.displayorder>='0'")."LIMIT1");if($forum){$fid=$forum['fid'];$forum['ismoderator']=!empty($forum['ismoderator'])||$adminid==1||$adminid==2?1:0;foreach(array('postcredits','replycredits','threadtypes','digestcredits','postattachcredits','getattachcredits','supe_pushsetting')as$key){$forum[$key]=!empty($forum[$key])?unserialize($forum[$key]):array();}}else{$fid=0;}}升。然后往forum这个数组里面写一些东西进去,比方说:发帖子得到的分数,回复得到的分数,帖子分类的类型等…$styleid=intval(!empty($_GET['styleid'])?$_GET['styleid']:(!empty($_POST['styleid'])?$_POST['styleid']:(!empty($_DSESSION['styleid'])?$_DSESSION['styleid']:$_DCACHE['settings']['styleid'])));$styleid=intval(isset($stylejump[$styleid])?$styleid:$_DCACHE['settings']['styleid']);if(@!includeDISCUZ_ROOT.'./forumdata/cache/style_'.intval(!empty($forum['styleid'])$forum['styleid']:$styleid).'.php'){$cachelost.=(@includeDISCUZ_ROOT.'./forumdata/cache/style_'.($styleid$_DCACHE['settings']['styleid']).'.php')?'':'style_'.$styleid;}?这里是得到论坛风格的地方,可以看到第一行的赋值Disuz用尽一切可能得到一个合理的风格styleid,呵呵,然后再来一行,看看是不是你在论坛底部切换了一下风格,有的话就override一下,把这个风格作为你的当前风格。如果没有缓存的话,再往cachelost这个里面写点东西。if($cachelost){require_onceDISCUZ_ROOT.'./include/cache.func.php';updatecache();dexit('CacheList:'.$cachelost.'<br>Cachessuccessfullycreated,pleaserefresh.');}如果cachelost中有东西的话,那么就调用include/cache.func.php,并用这个文件里面定义的updatecache();来更新缓存,if(!defined('CURSCRIPT')||CURSCRIPT!='wap'){if($nocacheheaders){@dheader("Expires:0");@dheader("Cache-Control:private,post-check=0,pre-check=0,max-age=0",FALSE);@dheader("Pragma:no-cache");}if($headercharset){@dheader('Content-Type:text/html;charset='.$charset);}if(empty($_DCOOKIE['sid'])||$sid!=$_DCOOKIE['sid']){dsetcookie('sid',$sid,604800);}}headerwapCURSCRIPTCURSCRIPT的script,比方说forumdisplay.php中就会有define(‘CURSCRIPT’,‘forumdisplay’);这样的定义
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械安全防护要求
- 护理产品竞争对手分析
- CADCAM技术应用项目教程课件:曲线功能
- 《人工智能通识》-项目5-5 AIGC视频生成应用 - 人工智能伦理案例
- 《猫病防治技术》课件-第33讲 猫口炎的治疗处置
- 儿科危重患儿护理实践案例分享
- 中职内科护理康复护理
- 普外科营养支持护理
- 安全培训计划大纲制度课件
- 机场地勤培训课件
- 美国技术贸易壁垒对我国电子产品出口的影响研究-以F企业为例
- 2025至2030中国电站汽轮机行业项目调研及市场前景预测评估报告
- 泌尿系统疾病总论
- 靶向阿托品递送系统设计-洞察及研究
- 救护车急救护理查房
- 安徽省工会会员管理办法
- 阳原王瑞雪培训课件
- CJ/T 186-2018地漏
- 2025年四川省成都市青羊区中考语文一模试卷
- 交熟食技术协议书
- 发改价格〔2007〕670号建设工程监理与相关服务收费标准
评论
0/150
提交评论