HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/bs.kntsleep.com/system/web/items/items.class.php
<?php
/*
 * Copyright (c) Huyin Information Technology Co., Ltd. All Rights Reserved.
 * BOSSCMS Content Management System (https://www.bosscms.net/)
 */
defined('IS_OK') or exit('Access Forbidden');
into::basic_class('web');

class items extends web
{
	public function init()
	{
		global $G;
		$this->statistics();
		$html = false;
		$file = md5($G['path']['link']).(isMobile()?'.mobile':'').'.html';
		if(!$G['view'] && $G['config']['page_cache_time']){
			$html = cache::auto($file, 'html');
		}
		if($html === false){
			if($G['area'] = $this->area()){
				$G['home'] = page::items_one(88888);
			}
			$G['items'] = $this->column();
			$G['tag'] = $this->tag();
			if(!isset($G['theme']['path'])){
				$G['theme']['path'] = $this->type($G['items']['type']);
			}
			$html = $this->theme($G['theme']['path']);
			if(!$G['view'] && $G['config']['page_cache_time']){
				cache::set($file, $html, 'html', true);
			}
		}
		/* 执行插件中的函数 */
		if($G['plugin']){
			foreach($G['plugin'] as $class){
				if($class && method_exists($class, 'over')){
					$html = $class->over($html, 'web');
				}
			}
		}
		echo $this->ad($html);
	}
	
	public function statistics()
	{
		global $G;
		if($G['config']['statistics_open']){
			if($_COOKIE['bosscmsuid'] && substr(md5(ROOT_PATH.$_COOKIE['bosscmsuid']),8,18)==$_COOKIE['bosscmsuidas']){
				$uid = $_COOKIE['bosscmsuid'];
			}
			if(!$uid){
				$uid = strRand(8);
				setcookie('bosscmsuid', $uid, TIME+31536000, '/');
				setcookie('bosscmsuidas', substr(md5(ROOT_PATH.$uid),8,18), TIME+31536000, '/');
			}
			$ip = getIP();
			$ctime = strtotime(date('Y-m-d H:00:00',TIME));
			$stime = strtotime(date('Y-m-d 00:00:00',TIME));
			$etime = strtotime(date('Y-m-d 23:59:59',TIME));
			$vid = substr(session_id(),8,18);
			$agent= strtolower($_SERVER['HTTP_USER_AGENT']);
			if(preg_match('/baiduspider/',$agent)){
				$spider = 'bd';
			}else if(preg_match('/bytespider/',$agent)){
				$spider = 'tt';
			}else if(preg_match('/sogou[\w\s]*spider/',$agent)){
				$spider = 'sg';
			}else if(preg_match('/360spider/',$agent)){
				$spider = 'so';
			}else if(preg_match('/yisouspider/',$agent)){
				$spider = 'sm';
			}else if(preg_match('/bingbot/',$agent)){
				$spider = 'bi';
			}else if(preg_match('/googlebot/',$agent)){
				$spider = 'ge';
			}else{
				$spider = '';
			}
			if($spider){
				$fail = 0;
				into::basic_class('cache');
				if(!$res = cache::auto('spiderip.json','json',86400)){
					into::basic_class('curl');
					$res = curl::request('https://storage.bosscms.net/file/download/spider/ip.json');
					cache::set('spiderip.json',$res,'json',true);
				}
				if($res = json::decode($res)){
					if($res[$spider] && $il=explode(',',$res[$spider])){
						$ipmd5 = md5($ip);
						$fail = 1;
						foreach($il as $v){
							if(strstr($ipmd5,$v)){
								$fail = 0;
								break;
							}
						}
					}
				}
			}
			if(mysql::total('statistics',"ctime='{$ctime}'")){
				$res = array('pv'=>'pv+1');
				if(!mysql::total('visit',"uid='{$uid}'")){
					$res['uv'] = 'uv+1';
				}
				if(!mysql::total('visit',"vid='{$vid}'")){
					$res['vv'] = 'vv+1';
				}
				if(!mysql::total('visit',"ip='{$ip}' AND ctime>={$stime} AND ctime<={$etime}")){
					$res['ip'] = 'ip+1';
				}
				if($spider){
					if($fail){
						$res['fail'] = 'fail+1';
					}else{
						$res[$spider] = $spider.'+1';
					}
				}
				mysql::update($res,'statistics',"ctime='{$ctime}'");
			}else{
				$res = array('ctime'=>$ctime,'pv'=>1,
					'uv' => mysql::total('visit',"uid='{$uid}'")?0:1,
					'vv' => mysql::total('visit',"vid='{$vid}'")?0:1,
					'ip' => mysql::total('visit',"ip='{$ip}' AND ctime>={$stime} AND ctime<={$etime}")?0:1
				);
				if($spider){
					if($fail){
						$res['fail'] = 1;
					}else{
						$res[$spider] = 1;
					}
				}
				mysql::insert($res,'statistics');
			}
			if($res = mysql::select_one('second','visit',$where="uid='{$uid}' AND vid='{$vid}' AND ip='{$ip}' AND spider='{$spider}' AND ctime=".$ctime)){
				mysql::update(array('second'=>(TIME-$ctime).','.$res['second']),'visit',$where);
			}else{
				mysql::insert(array('ctime'=>$ctime,'second'=>TIME-$ctime,'uid'=>$uid,'vid'=>$vid,'ip'=>$ip,'spider'=>$spider),'visit');
			}
		}
	}
	
	public function area()
	{
		global $G;
		$area = null;
		$zq = arrExist($G,'get|zq');
		if($G['config']['area_open']){
			if($G['config']['area_link_type']){
				$prefix = str_replace('.'.preg_replace('/^www\./','',arrExist(parse_url($G['config']['domain']),'host')),'',$G['path']['host']);
				if(preg_match('/^[\w\-]+$/',$prefix) && ($res=page::area_one(null,'*',"(prefix='{$prefix}' OR sign='{$prefix}')"))){
					$area = $res;
				}
			}else{
				if($zq && ($res=page::area_one($zq))){
					$area = $res;
				}
			}
		}else if($zq){
			url::page404();
		}
		return $area;
	}
	
	public function tag()
	{
		global $G;
		$tag = null;
		if($t = arrExist($G,'get|tag')){
			if($res = page::tag_name($t)){
				$tag = $res;
			}
		}
		return $tag;
	}
	
	public function column($id=0)
	{
		global $G;
		if($id){
			$items = page::items_one($id);
		}else if($G['path']['home']){
			$items = $G['home'];
		}else if(!$G['get']['items'] || is_numeric($G['get']['items'])){
			$items = page::items_one($G['get']['items'], '*', "folder='{$G['path']['folder']}'", "level ASC,id ASC");
		}
		if($items){
			if(!$G['view'] && !$G['path']['home'] && $items['weight']){
				if(!$G['member'] || $G['member']['weight']<$items['weight']){
					if($G['config']['member_weight_link']){
						location($G['config']['member_weight_link']);
					}else{
						url::page404();
					}
				}
			}
			$items['parents'] = /* 该栏目的父级 */
			$items['max'] = /* 最大的父级栏目id(不考虑类型和模板主题风格) */
			$items['max_parent'] = /* 最大的拥有同样类型的父级栏目id */
			$items['max_parents'] =  /* 最大的拥有同样类型且模板主题风格一样的父级栏目id */
			$items['id'];
			if($items['parent']){
				$items['parent_list'] = page::items('-'.$items['parent']);
				if($items['parent_list']){
					$items['parents'] = $items['parent'];
					$max_parent = $max_parents = true;
					foreach($items['parent_list'] as $k=>$v){
						if($max_parents && $v['type']==$items['type'] && $v['theme']==$items['theme']){
							$items['max_parents'] = $v['id'];
						}else{
							$max_parents = false;
						}
						if($max_parent && $v['type']==$items['type']){
							$items['max_parent'] = $v['id'];
						}else{
							$max_parent = false;
						}
						$items['max'] = $v['id'];
					}
				}
			}
			$items['children'] = mysql::total('items',"parent='{$items['id']}' AND display='1'");
			$data = page::config_option($items['id'],0);
			if($data){
				$G['config'] = array_merge($data, $G['config']);
			}
		}else{
			url::page404();
		}
		return $items;
	}
	
	public function type($number)
	{
		global $G;
		$table = array_search($number,$G['pass']['type']);
		$name = '';
		if(preg_match('/^(0|10)$/',$number)){
			$name = $G['items']['theme']?$G['items']['theme']:$table.'.html';
		}else if(preg_match('/^(2|3|4|5)\d?$/',$number)){	
			if(isset($G['get']['id'])){
				if(is_numeric($G['get']['id']) && $G['group']=page::group_one($G['get']['id'],$G['items']['type'])){
					if($G['items']['id'] != $G['group']['items']){
						$items = $G['items'];
						if($G['items'] = $this->column($G['group']['items'])){
							if($G['items']['parent_list'][$items['id']] && $items['type']==$G['items']['type']){
								$G['get']['items'] = $G['group']['items'];
							}else{
								url::page404();
							}
						}
					}
				}else{
					url::page404();
				}
			}
			if(isset($G['group'])){
				if(!$G['view'] && $G['group']['weight']){
					if(!$G['member'] || $G['member']['weight']<$G['group']['weight']){
						if($G['config']['member_weight_link']){
							location($G['config']['member_weight_link']);
						}else{
							url::page404();
						}
					}
				}
				if(!$G['view'] && is_numeric($G['group']['golds']) && $G['group']['golds']>0 && ($number!=5 || !$G['config']['download_golds_type'])){
					if(!$G['member'] || !mysql::total('docbuy',"model='{$number}' AND parent='{$G['group']['id']}' AND member='{$G['member']['id']}'")){
						location(url::param(url::param(url::member(null,'warning'),'buy','doc'),'id',$number.'_'.$G['group']['id']));
					}
				}
				if($G['area'] && !$G['config']['area_detail_open']){
					url::page404();
				}
				if($number>=20){
					$table = preg_replace('/^model_/','',$table);
				}
				if($G['config']['shop_open'] && $G['config']['shop_model']==$number){
					$name = 'shop_detail/shop_detail.html';
				}else{
					if($G['group']['theme']){
						$name = $table.'_detail/'.$G['group']['theme'];
					}else{
						$name = $table.'_detail/'.($G['items']['themes']?$G['items']['themes']:$table.'_detail.html');
					}
				}
			}else{
				if($number>=20){
					$table = preg_replace('/^model_/','',$table);
				}
				if($G['config']['shop_open'] && $G['config']['shop_model']==$number){
					$name = 'shop/shop.html';
				}else{
					$name = $table.'/'.($G['items']['theme']?$G['items']['theme']:$table.'.html');
				}
				if($tag = arrExist($G,'get|tag')){
					$G['groups'] = page::group_tag($tag,$G['items']['type']);
				}else{
					$G['groups'] = page::group_list($G['items']['id']);
				}
			}
		}else if(preg_match('/^(1|6|7|8)$/',$number)){	
			if($number==7){
				if($G['config']['search_open']){
					$G['keyword'] = $keyword = arrExist($G,"get|{$G['config']['search_keyword']}");
					if(isset($keyword) && $keyword!==''){
						$ip = getIP();
						if(!is_numeric($G['config']['search_interval_time'])){
							$G['config']['search_interval_time'] = 5;
						}
						if(!$G['config']['search_interval_prompt']){
							$G['config']['search_interval_prompt'] = '[s]秒内只能搜索一次';
						}
						if(mysql::total('search',"ip='{$ip}' AND ctime>".(TIME-$G['config']['search_interval_time']))){
							alert(str_replace('[s]',$G['config']['search_interval_time'],$G['config']['search_interval_prompt']),$G['items']['url']);
						}else{
							$G['config']['search_null'] = str_replace('[keyword]','[<strong>'.stripslashes($keyword).'</strong>]',$G['config']['search_null']);
							if($G['config']['search_record']){
								if($sear = mysql::select_one('id','search',"parent='{$G['items']['id']}' AND keyword='{$keyword}' AND ip='{$ip}' AND ctime>".(TIME-3600))){
									mysql::update(array('ctime'=>TIME),'search',"id='{$sear['id']}'");
								}else{
									mysql::insert(array('parent'=>$G['items']['id'],'keyword'=>$keyword,'ip'=>$ip,'ctime'=>TIME),'search');
								}
							}
						}
					}
				}else{
					url::page404();
				}
			}
			$name = $table.'/'.($G['items']['theme']?$G['items']['theme']:$table.'.html');
		}else if($number==11){
			if(arrExist($G['config'],'member_open')){
				$action = arrExist($G['get'],'action');
				if($action == 'login'){
					$name = 'member/login.html';
				}else if($action == 'register'){
					if(!$G['config']['member_register_open']){
						url::page404();
					}
					$name = 'member/register.html';
				}else if($action == 'warning'){
					if($G['get']['buy']=='doc'){
						list($type,$id) = explode('_',$G['get']['id']);
						$G['group'] = page::group_one($id,$type);
					}
					$name = 'member/warning.html';
				}else{
					if($G['member']){
						if(!$action){
							$action = 'home';
							$G['groups'] = page::group_all(10,null,null,null,'pages','*',"display=1 AND recycle=0 AND weight>=0",'mtime DESC,id DESC');
							if(mt_rand(0,9)<=1){
								$path = "upload/member/{$G['member']['id']}/";
								$dirs = dir::readall(ROOT_PATH.$path);
								$size = 0;
								foreach($dirs as $v){
									$size += filesize(ROOT_PATH.$path.$v);
								}
								mysql::update(array('storage'=>$size),'member',"id='{$G['member']['id']}'");
							}
						}
						switch($action){
							case 'comment':
								$G['comment'] = page::comment_pages($G['member']['id']);
								break;
							case 'config':
								if(!$G['get']['material']){
									$res = page::material($G['member']['id']);
									foreach($res as $v){
										$G['member']['params'.$v['parent']] = $v['value'];
									}
									$G['form'] = page::form_register($G['member']);
									if($G['member']['weight']>0 && $G['config']['member_material_open']){
										$grade = page::grade_one($G['member']['weight']);
										$G['hasform'] = page::form_grade($grade['id']);
									}
								}else{
									if($G['member']['weight']>0 && $G['config']['member_material_open']){
										$grade = page::grade_one($G['member']['weight']);
										$res = page::material($G['member']['id'],$grade['id']);
										foreach($res as $v){
											$G['member']['params'.$v['parent']] = $v['value'];
										}
										$G['hasform'] = $G['form'] = page::form_grade($grade['id'],$G['member']);
									}else{
										url::page404();
									}
								}
								break;
							case 'orders':
								$G['orders'] = page::orders_pages($G['member']['id']);
								break;
							case 'collect':
								$G['collect'] = page::collect_pages($G['member']['id'], 0);
								break;
							case 'assign':
								if($G['get']['orders'] && preg_match('/^(2|4)$/',$G['get']['payment'])){
									if(!$G['order'] = mysql::select_one('*','orders',"num='{$G['get']['orders']}' AND payment='{$G['get']['payment']}' AND state=0 AND member='{$G['member']['id']}'")){
										location(url::member($G['items']['folder'],'orders'));
									}
								}
								break;
							case 'contribute':
								if(!$G['get']['tools']){
									$G['contribute'] = page::group_all(null,null,null,null,'pages','*',"issuer='-{$G['member']['id']}' AND display=1 AND recycle=0",'mtime DESC,id DESC');
								}else if($G['get']['tools']==1){
									$G['contribute'] = page::docbuy_pages($G['member']['id']);
								}
								break;
							case 'publish':
								if($G['config']['member_contribute_open']){
									if(preg_match('/^\d+_\d+$/',$G['get']['id'])){
										$ti = explode('_',$G['get']['id']);
										if($table = array_search($ti[0],$G['pass']['type'])){
											if($G['group'] = mysql::select_one('*',$table,"id='{$ti[1]}' AND issuer='-{$G['member']['id']}' AND weight=-1 AND display=1 AND recycle=0")){
												if($res = mysql::select_one('*',$table.'_content',"id='{$ti[1]}'")){
													$G['group'] = $G['group']+$res;
												}
											}
											$G['get']['type'] = $type = $ti[0];
										}
									}
									$G['subarr'] = page::items_option(0,false,array(),false,explode(',',arrExist(mysql::select_one('GROUP_CONCAT(id) AS ids','models',"cweight<='{$G['member']['weight']}' AND display=1 AND contribute=1"),'ids')));
									foreach($G['subarr'] as $k=>$v){
										if(mysql::total('items',"id='{$k}' AND contribute=1 AND display=1 AND weight<='{$G['member']['weight']}'")){
											$G['subarr'][$k] = str_replace('&#10551;','',$v);
										}else{
											unset($G['subarr'][$k]);
										}
									}
									if(!$G['group']){
										$G['get']['itemsid'] = $G['get']['itemsid']?$G['get']['itemsid']:key($G['subarr']);
										$G['get']['type'] = $type =	arrExist(mysql::select_one('type','items',"id='{$G['get']['itemsid']}'"),'type');
									}
									if($type>=20){
										$G['field'] = page::field($type,'*','display=1');
										$G['transfer'] = array();
									}else{
										$config = load::config();
										$G['transfer'] = isset($config['transfer'][$table])?$config['transfer'][$table]:array();
									}
								}else{
									url::page404();
								}
								break;
							case 'finance':
								$pay1 = $G['option']['payment'][1];
								$G['payment'] = json::decode(str_replace($pay1,$pay1."({$G['member']['balance']}元)",$G['config']['payment']));
								break;
							case 'message':
								if(!is_numeric($G['get']['id'])){
									$res = mysql::select_all('*', 'message', "receive=0 AND !FIND_IN_SET('{$G['member']['id']}',notice)");
									foreach($res as $v){
										mysql::insert(array('name'=>$v['name'], 'content'=>$v['content'], 'issuer'=>$v['issuer'], 'author'=>$v['author'], 'ctime'=>$v['ctime'], 'rtime'=>TIME,
															'parent'=>$v['id'], 'reading'=>0, 'receive'=>1, 'member'=>$G['member']['id'], 'notice'=>''),'message');
										mysql::update(array('notice'=>trim($v['notice'].','.$G['member']['id'],',')),'message',"id='{$v['id']}'");
									}
									$G['message'] = page::message_pages($G['member']['id'], $G['get']['reading']);
									foreach($G['message']['list'] as $v){
										if($v['rtime']==0){
											mysql::update(array('rtime'=>TIME),'message',"id='{$v['id']}' AND member='{$G['member']['id']}'");
										}
									}
								}else{
									if($G['msg'] = page::message_one($G['get']['id'], $G['member']['id'])){
										if(!$G['msg']['reading']){
											mysql::update(array('reading'=>1),'message',"id='{$G['get']['id']}'");
										}
									}
								}
								break;
							case 'promote':
								if(!$G['member']['invite']){
									$G['member']['invite'] = $invite = strtoupper(strRand(18));
									mysql::update(array('invite'=>$invite),'member',"id='{$G['member']['id']}'");
								}
								url::$domain = $G['config']['domain'];
								$G['promoteurl'] = url::param(url::member($G['items']['folder'],'register'),'invite',$G['member']['invite']);
								url::$domain = false;
								break;
							default:
								if($G['config']['shop_open'] && preg_match('/^shop_\w+$/',$action)){
									into::load_class('plugin','shop','core','new')->show($action);
								}
								break;
						}
						$name = 'member/'.$action.'.html';
					}else{
						session::clear('member');
						location(url::member($G['items']['folder'],'login'));
					}
				}
			}else{
				url::page404();
			}
		}
		return $name;
	}

	public function ad($html)
	{
		global $G;
		if(!arrExist(json::decode($G['config']['authorize']),'auth')){
			$adjs = '<script src="https://accounts.bosscms.net/advert/s'.(isMobile()?1:'').'.js"></script>';
			if(preg_match('/<\/body>[\s\r\n\t]+<\/html>[\s\r\n\t]*$/',$html)){
				$html = preg_replace('/<\/body>[\s\r\n\t]+<\/html>[\s\r\n\t]*$/',$adjs."\n\\0",$html);
			}else{
				$html .= $adjs;
			}
		}
		return $html;
	}
}
?>