attern, $uri, $matches); if(isset($matches[1])){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'shiciguwen_jiansuo'; $_GET['chaodai'] = $matches[1]; if(isset($matches[3])){ $_GET['page'] = $matches[3]; } return; } }elseif(!$has_url_suffix && substr($uri,0,13) == 'yingyucidian/') { //英语词典模型相关URL $pattern = '/yingyucidian\/([a-z]+)\/(.+)(?:\/page_(\d+))?\/$/'; preg_match($pattern, $uri, $matches); $field_arr = array('exam','trade','collins','frq'); if(isset($matches[2]) && in_array($matches[1],$field_arr)){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'yingyucidian_jiansuo'; $_GET['field'] = $matches[1]; $_GET['val'] = $matches[2]; if(isset($matches[3])){ $_GET['page'] = $matches[3]; } return; } }elseif(!$has_url_suffix && substr($uri,0,11) == 'jinfanyici/') { //近反义词模型相关URL //字数检索 $pattern = '/jinfanyici\/zishu\/(\d+)(?:\/page_(\d+))?\/$/'; preg_match($pattern, $uri, $matches); if(isset($matches[1])){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'jinfanyici_jiansuo'; $_GET['zishu'] = $matches[1]; if(isset($matches[2])){ $_GET['page'] = $matches[2]; } return; } //首拼检索 $pattern = '/jinfanyici\/shoupin\/([a-z])(?:\/page_(\d+))?\/$/'; preg_match($pattern, $uri, $matches); if(isset($matches[1])){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'jinfanyici_jiansuo'; $_GET['shoupin'] = $matches[1]; if(isset($matches[2])){ $_GET['page'] = $matches[2]; } return; } }elseif(!$has_url_suffix && substr($uri,0,13) == 'kangxizidian/') { //康熙字典模型相关URL //笔画检索 $pattern = '/kangxizidian\/bihua\/(\d+)(?:\/page_(\d+))?\/$/'; preg_match($pattern, $uri, $matches); if(isset($matches[1])){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'kangxizidian_jiansuo'; $_GET['bihua'] = $matches[1]; if(isset($matches[2])){ $_GET['page'] = $matches[2]; } return; } //五行检索 $pattern = '/kangxizidian\/wuxing\/([0-9a-z]+)(?:\/page_(\d+))?\/$/'; preg_match($pattern, $uri, $matches); if(isset($matches[1])){ $_GET['control'] = 'guoxue'; $_GET['action'] = 'kangxizidian_jiansuo'; $_GET['wuxing'] = $matches[1]; if(isset($matches[2])){ $_GET['page'] = $matches[2]; } return; } }elseif(!$has_url_suffix && substr($uri,0,6) == 'today/' && strlen($uri) > 10) { $pattern = '/^today\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/$/'; preg_match($pattern, $uri, $matches); if(isset($matches[2])){ $_GET['control'] = 'cate'; $_GET['action'] = 'index'; $_GET['cid'] = 145; //历史上的今天分类CID $_GET['month'] = $matches[1]; $_GET['day'] = $matches[2]; return; } } if($has_url_suffix) { $uri_new = substr($uri, 0, -$url_suffix_len); if(substr($uri_new, 0 , 8) == 'unicode/'){ $u_arr = explode('/', $uri_new); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'unicode'; $_GET['action'] = $u_arr[1]; switch ($u_arr[1]){ case 'detail': $_GET['tongyima'] = isset($u_arr[2]) ? $u_arr[2] : ''; } return; } } if(stripos($uri_new, '/detail/')){ //详情页 $table = ''; if(substr($uri_new, 0, 13) == 'yingyucidian/'){ $u_arr = explode('/', $uri_new); $table = 'yingyucidian'; if(isset($u_arr[2]) && $u_arr[2]){ $matches[1] = $table; $matches[2] = $u_arr[2]; } }else{ $pattern = '/^([a-z]+)\/detail\/([a-z0-9]+)$/'; preg_match($pattern, $uri_new, $matches); if(isset($matches[1]) && in_array($matches[1], $cfg['table_arr'])){ $table = $matches[1]; } } if(isset($matches[2]) && $matches[2] && $table){ if($matches[1] == 'yingyucidian'){ $title = urldecode($matches[2]); }else{ $title = misc_utf816_re($matches[2]); } $r = $this->guoxue->get_content($title, $table); if($r){ $_GET['control'] = 'show'; $_GET['action'] = 'index'; $_GET['show'] = $r; return true; }else{ misc_go_back($cfg['webdir']); } } $pattern = '/^([a-z]+)\/([0-9]+)\/detail\/([a-z0-9]+)$/'; preg_match($pattern, $uri_new, $matches); if(isset($matches[1]) && in_array($matches[1], $cfg['table_arr'])){ $table = $matches[1]; } if(isset($matches[3]) && $matches[3] && $table){ $title = misc_utf816_re($matches[3]); $r = $this->guoxue->get_content(array('cid'=>$matches[2], 'title'=>$title), $table); if($r){ $_GET['control'] = 'show'; $_GET['action'] = 'index'; $_GET['show'] = $r; return true; } } }elseif (stripos($uri_new, '/fenci/')){ //汉语词典的分词解释URL $pattern = '/hanyucidian\/fenci\/([a-z0-9]+)$/'; preg_match($pattern, $uri_new, $matches); if(isset($matches[1]) && $matches[1]){ $r = $this->guoxue->get_content($matches[1], 'hanyucidian'); if($r){ $_GET['control'] = 'show'; $_GET['action'] = 'index'; $_GET['show'] = $r; $_GET['fenci'] = 1; return true; } } }elseif (stripos($uri_new, '/chapter/')){ //内容章节详情URL $pattern = '/([a-z0-9]+)_([a-z0-9]+)\/chapter\/([a-z0-9]+)$/'; preg_match($pattern, $uri_new, $matches); if(isset($matches[3]) && $matches[3]){ $_GET['control'] = 'show'; $_GET['action'] = 'chapter'; $_GET['cid'] = $matches[1]; $_GET['id'] = $matches[2]; $_GET['chapterid'] = $matches[3]; return true; } } } $day_prefix = $cfg['le_huangli']['day_prefix']; $day_prefix_len = strlen($day_prefix); if(substr($uri,0,$day_prefix_len+1)=="{$day_prefix}/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'huangli'; $_GET['action'] = 'day'; $_GET['date'] = $u_arr[1]; return; } } if(substr($uri , 0 , 4) == 'bjx/' && strlen($uri) > 4){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(!isset($u_arr[1])){ core::error404(); } $_GET['control'] = 'qm'; $_GET['action'] = 'bjx'; $_GET['xing'] = $u_arr[1]; return; }elseif(substr($uri , 0 , 5) == 'xing/' && strlen($uri) > 5){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); $_GET['control'] = 'qm'; $_GET['action'] = 'xing'; $_GET['xing'] = $u_arr[1]; if(is_numeric($u_arr[1])){ $_GET['action'] = 'xinglist'; $_GET['id'] = $u_arr[1]; //分页 if(isset($u_arr[2])){ if($page = $this->page_check($u_arr[2])){ $_GET['page'] = $page; }else{ core::error404(); } } return; } if(!isset($u_arr[2])){ core::error404(); } $sex_zi = explode('_', $u_arr[2]); if(!isset($sex_zi[1])){ core::error404(); } $_GET['sex'] = $sex_zi[0]; $_GET['zi'] = $sex_zi[1]; //分页 if(isset($u_arr[3])){ if($page = $this->page_check($u_arr[3])){ $_GET['page'] = $page; }else{ core::error404(); } } return; }elseif(substr($uri , 0 , 7) == 'mingzi/' && strlen($uri) > 7){ if(substr($uri, -4) == '.jpg'){ $newurl = substr($uri, 0, -4); $u_arr = explode('/', $newurl); if(isset($u_arr[2])){ $_GET['control'] = 'qm'; $_GET['action'] = 'mingzipic'; $_GET['xingming'] = $u_arr[2]; return; } } $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(!isset($u_arr[2])){ core::error404(); } //解名 URL里面的时间解析 if(stripos(R('REQUEST_URI', 'S'), 'year') !== false ){ parse_str(parse_url(R('REQUEST_URI', 'S'), PHP_URL_QUERY), $params); foreach ($params as $k=>$v){ $_GET[$k] = $v; } } $_GET['control'] = 'qm'; $_GET['action'] = 'mingzi'; $_GET['xing'] = $u_arr[1]; $_GET['ming'] = $u_arr[2]; return; }elseif(substr($uri , 0 , 13) == 'wuxingzidian/' && strlen($uri) > 13){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(!isset($u_arr[1])){ core::error404(); } $_GET['control'] = 'qm'; $_GET['action'] = 'kangxizidian'; $_GET['id'] = $u_arr[1]; return; }//标题缩略图伪静态 cid_id.jpg if( preg_match('/pic\/(\d+)_(\d+)\.jpg/i', $uri, $match) ){ $title = ''; if( isset($match[1]) && isset($match[2]) ){ $cid = $match[1]; $id = $match[2]; $category = $this->category->get_cache($cid); if($category){ // 初始模型表名 $this->cms_content->table = 'cms_'.$category['table']; // 读取内容 $_show = $this->cms_content->read($id); if($_show){ $title = $_show['title']; } } } if( empty($title) ){ exit(); } //$title = $match[1]; //如果浏览器对当前页面已经有缓存,那么就直接使用它 if (isset($_SERVER['http_IF_MODIFIED_SINCE'])) { header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304); exit(); } //随机取一个背景图 $bgimgdir = PLUGIN_PATH.'le_title_pic/bg_img/'; if( !is_dir($bgimgdir) ){exit();} $all_image_files = _scandir($bgimgdir);//背景图存放文件夹的jpg图片 foreach ($all_image_files as $k=>$file){ if($file == '.' || $file == '..'){ unset($all_image_files[$k]); } } if( empty($all_image_files) ){ exit(); } shuffle($all_image_files); $backgroundFile = array_slice($all_image_files, 0, 1); $backgroundPath = $bgimgdir.$backgroundFile[0]; $font = PLUGIN_PATH."le_title_pic/static/font.otf"; //字体 $size = 14; //默认字体大小 $oneline = 10; preg_match_all("/./u", $title, $t_arr);//将所有字符转成单个数组 $tarr = $t_arr[0]; $t_total = count($tarr); //标题长度 if($t_total > 30){ $t_total = 30; } $cha = 30 - $t_total; $size = $size + $cha; if($size > 28 ){ $size = 28; }elseif($size < 18){ $size = 18; } $text = ''; if($t_total > $oneline){ $line = 2; $bnum = $t_total/2; $snum = 0; for ($x = 0; $x < $t_total; $x++) { $snum++; if($snum >= $bnum){ $snum = 0; $text .= $tarr[$x].PHP_EOL; }else{ if($x > 27){ $text .= "..."; break; }else{ $text .= $tarr[$x]; } } } }else{ $text = $title; $line = 1; } //创建图片 $img = imagecreatefromjpeg($backgroundPath); $width = imagesx($img); $height = imagesy($img); if($line > 1){ $a = imagettfbbox($size, 0, $font, $text); //得到字符串虚拟方框四个点的坐标 $len = $a[2] - $a[0]; $x = ($width-$len)/2; $h = $size/10; $y = ($height/2)-15+$h; }else{ $a = imagettfbbox($size, 0, $font, $text); //得到字符串虚拟方框四个点的坐标 $len = $a[2] - $a[0]; $x = ($width-$len)/2; $h = $size/10; $y = ($height/2)+10+$h; } $color = imagecolorallocate($img, 255, 255, 255); // 0 0 0 表示黑色 $setting = $this->kv->get('le_title_pic_setting'); $cache_day = $setting['cache_day'].' day'; //缓存天数 //将规定当前页面缓存的时间(两天),并在下一次访问中使用这个缓存时间节点。接下来判断是否已经有缓存,如果有,就使用缓存。 header("Cache-Control: private, max-age=10800, pre-check=10800"); header("Pragma: private"); header("Expires: " . date(DATE_RFC822, strtotime($cache_day))); header("Content-type:image/jpeg"); imagettftext($img, $size, 0, $x, $y, $color, $font, $text); imagejpeg($img); imagedestroy($img); exit(); }if(substr($uri,0,9)=="province/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'province'; $_GET['alias'] = $u_arr[1]; return; } }elseif(substr($uri,0,8)=="zipcode/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'zipcode'; $_GET['keywords'] = $u_arr[1]; if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return; } }elseif(substr($uri,0,8)=="address/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[2]) && $u_arr[2]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'address'; $_GET['alias'] = $u_arr[1]; $_GET['id'] = $u_arr[2]; return; } }elseif(substr($uri,0,5)=="city/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'city'; $_GET['alias'] = $u_arr[1]; return; } }elseif(substr($uri,0,6)=="guoji/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'guoji'; $_GET['alias'] = $u_arr[1]; return; } }elseif(substr($uri,0,10)=="sozipcode/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'sozipcode'; $_GET['keyword'] = $u_arr[1]; //分页 if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return; } }elseif(substr($uri,0,12)=="addressinfo/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'addressinfo'; $_GET['param'] = $u_arr[1]; return; } }elseif(substr($uri,0,10)=="soaddress/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'soaddress'; $_GET['keyword'] = $u_arr[1]; //分页 if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return; } }elseif(substr($uri,0,15)=="postalcodelist/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[1]) && $u_arr[1]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'postalcodelist'; $_GET['country'] = $u_arr[1]; //分页 if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return; } }elseif(substr($uri,0,11)=="postalcode/" && substr($uri, -$url_suffix_len) == $url_suffix){ $newurl = substr($uri, 0, -$url_suffix_len); $u_arr = explode('/', $newurl); if(isset($u_arr[2]) && $u_arr[2]){ $_GET['control'] = 'youbian'; $_GET['action'] = 'postalcode'; $_GET['country'] = $u_arr[1]; $_GET['zipcode'] = $u_arr[2]; return; } } //站点地图 $sitemap_uri = array('sitemap.xml', 'sitemap.html', 'sitemap.txt'); if(in_array($uri, $sitemap_uri)){ $u_arr = explode('.', $uri); $_GET['control'] = 'sitemap'; $_GET['action'] = $u_arr[1]; return; } $r = $this->category_url($cfg, $uri); if($r){return;} $r = $this->content_url($cfg, $uri); if($r){return;} $r = $this->tag_url($cfg, $uri); if($r){return;} $r = $this->search_url($cfg, $uri); if($r){return;} $r = $this->comment_url($cfg, $uri); if($r){return;} $r = $this->index_page_url($cfg, $uri); if($r){return;} $r = $this->tag_like_url($cfg, $uri); if($r){return;} $r = $this->user_url($cfg, $uri); if($r){return;} $r = $this->model_url($cfg, $uri); if($r){return;} $r = $this->flags_url($cfg, $uri); if($r){return;} $r = $this->space_url($cfg, $uri); if($r){return;} } //伪静态结束------------------------------------------------------------------------------------------------------ // 伪静态时,如果 $uri 有值,但没有解析到相关 $_GET 时,就提示404 if(empty($_GET) && isset($uri) && !empty($uri)) { core::error404(); } if( !isset($_GET['control']) ) { $r = $this->other_url(); if($r){return;} } } //---------------------------------------------------------------------- 以下是各模块URL解析的具体函数实现 //模型页URL解析 protected function model_url($cfg = array(), $uri = ''){ //模型信息 table=>mid $model_arr = array_flip($cfg['table_arr']); // 模型URL未设置后缀/的情况,301重定向到已设置后缀的URL if( isset($model_arr[$uri]) ) { http_location($cfg['weburl'].$uri.'/', '301'); } $_GET['control'] = 'model'; $_GET['action'] = 'index'; if(substr($uri, -1) == '/'){ $newurl = substr($uri, 0, -1); }else{ $newurl = $uri; } //模型首页URL if( isset($model_arr[$newurl]) ) { $_GET['mid'] = (int)$model_arr[$newurl]; return true; } //模型分页URL $u_arr = explode('/', $newurl); if( isset($model_arr[$u_arr[0]]) ) { $_GET['mid'] = (int)$model_arr[$u_arr[0]]; //分页 if( isset($u_arr[1]) ){ if($page = $this->page_check($u_arr[1])){ $_GET['page'] = $page; }else{ core::error404(); } } return true; } unset($_GET['control']); unset($_GET['action']); return false; } //分类URL解析 protected function category_url($cfg = array(), $uri = ''){ //分类信息 alias=>cid $cate_arr = array_flip($cfg['cate_arr']); // 分类URL未设置后缀的情况,301重定向到已设置后缀的URL if( isset($cate_arr[$uri]) ) { http_location($cfg['weburl'].$uri.$cfg['link_cate_end'], '301'); } $_GET['control'] = 'cate'; $_GET['action'] = 'index'; $len = strlen($cfg['link_cate_end']); //分页首页URL if(substr($uri, -$len) == $cfg['link_cate_end']) { $newurl = substr($uri, 0, -$len); if( isset($cate_arr[$newurl]) ) { $_GET['cid'] = (int)$cate_arr[$newurl]; return true; } } //分类URL分页的情况 if(strpos($uri, $cfg['link_cate_page_pre']) !== FALSE) { $len = strlen($cfg['link_cate_page_end']); if(substr($uri, -$len) == $cfg['link_cate_page_end']) { $newurl = substr($uri, 0, -$len); $u_arr = explode($cfg['link_cate_page_pre'], $newurl); if( isset($cate_arr[$u_arr[0]]) ) { $_GET['cid'] = (int)$cate_arr[$u_arr[0]]; //分页 if( isset($u_arr[1]) ){ if($this->integer_check($u_arr[1])){ $_GET['page'] = $u_arr[1]; }else{ core::error404(); } } return true; } } } unset($_GET['control']); unset($_GET['action']); return false; } //内容URL解析 protected function content_url($cfg = array(), $uri = ''){ $link_show_end = $cfg['link_show_end']; $link_show_end_len = strlen($link_show_end); $cate_arr = array_flip($cfg['cate_arr']); $newurl = $link_show_end_len ? substr($uri, 0, -$link_show_end_len) : $uri; $_GET['control'] = 'show'; $_GET['action'] = 'index'; //黄道吉日下一年的URL $year_mark = substr($newurl, -10, 6); $year = substr($newurl, -4); if($year_mark == '/year_' && preg_match('/^[1-9]\d{3}$/', $year)){ $newurl = substr($newurl, 0,-10); $_GET['year'] = $year; } switch ($cfg['link_show_type']){ case 1: //数字型 preg_match("/^(\d+)\/(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ){ $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; } break; case 2: //推荐型 preg_match("/^(\w+)\/(\d+)$/i", $newurl, $mat); if( isset($mat[2]) && isset($cate_arr[$mat[1]]) ){ $_GET['cid'] = $cate_arr[$mat[1]]; $_GET['id'] = $mat[2]; return true; } break; case 3: //别名型 preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); //没有设置别名,将用 cid_id 组合 if( isset($mat[2]) ) { $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; }elseif( preg_match('/^[a-zA-Z0-9-_]+$/i', $newurl) ) { $row = $this->only_alias->get($newurl); if( !empty($row) ) { $_GET['cid'] = $row['cid']; $_GET['id'] = $row['id']; return true; } } break; case 4: //加密型 $newurl = decrypt($newurl);//解密得到 cid_id preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ) { $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; } break; case 5: //ID型 if($this->integer_check($newurl)){ $_GET['mid'] = 2; $_GET['id'] = $newurl; return true; } preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ) { if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; } break; case 6: //别名组合型 $u_arr = explode('/', $newurl); if( isset($u_arr[1]) && isset($cate_arr[$u_arr[0]]) ){ $cid = (int)$cate_arr[$u_arr[0]]; // 如果没有设置别名,将用 cid_id 组合 preg_match("/^(\d+)\_(\d+)$/i", $u_arr[1], $mat); if(isset($mat[2]) && $mat[1] == $cid) { $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; }elseif(preg_match('/^[a-zA-Z0-9-_]+$/i', $u_arr[1])) { $row = $this->only_alias->get($u_arr[1]); if(!empty($row) && $row['cid'] == $cid) { $_GET['cid'] = $row['cid']; $_GET['id'] = $row['id']; return true; } } } break; case 7: //灵活型 $quote = preg_quote($cfg['link_show'], '#'); $quote = strtr($quote, array( '\{cid\}' => '(?\d+)', '\{mid\}' => '(?\d+)', '\{id\}' => '(?\d+)', '\{alias\}' => '(?\w+)', '\{cate_alias\}' => '(?\w+)', '\{password\}' => '(?\w+)', '\{ymd\}' => '(?\d{8})', '\{y\}' => '(?\d{4})', '\{m\}' => '(?\d{2})', '\{d\}' => '(?\d{2})', '\{auth_key\}' => '(?\w+)', '\{hashids\}' => '(?\w+)' )); preg_match('#'.$quote.'#', $uri, $mat); if($mat){ //用于control验证日期 isset($mat['ymd']) AND $_GET['date_ymd'] = $mat['ymd']; isset($mat['y']) AND $_GET['date_y'] = $mat['y']; isset($mat['m']) AND $_GET['date_m'] = $mat['m']; isset($mat['d']) AND $_GET['date_d'] = $mat['d']; $auth_key = $_ENV['_config']['auth_key']; if( isset($mat['auth_key']) && $mat['auth_key'] != substr(md5($auth_key), 0, 6) ){ core::error404(); } if( isset($mat['cid']) && isset($mat['id']) ) { // {cid} {id} 合组 $_GET['cid'] = $mat['cid']; $_GET['id'] = $mat['id']; return true; }elseif( isset($mat['mid']) && isset($mat['id']) && $this->mid_check($mat['mid'], $cfg) ) { // {mid} {id} 合组 $_GET['mid'] = $mat['mid']; $_GET['id'] = $mat['id']; return true; }elseif( isset($mat['cate_alias']) && isset($mat['id']) ) { // {cate_alias} {id} 合组 $_GET['cid'] = isset($cate_arr[$mat['cate_alias']]) ? $cate_arr[$mat['cate_alias']] : 0; empty($_GET['cid']) && core::error404(); $_GET['id'] = $mat['id']; return true; }elseif( isset($mat['password']) ) { // {password} $newurl = decrypt($mat['password']);//解密得到 cid_id preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ) { $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; } }elseif( isset($mat['alias']) ) { // {alias} preg_match("/^(\d+)\_(\d+)$/i", $mat['alias'], $mat2); //没有设置别名,将用 cid_id 组合 if( isset($mat2[2]) ) { $_GET['cid'] = $mat2[1]; $_GET['id'] = $mat2[2]; return true; } $row = $this->only_alias->get($mat['alias']); if(!empty($row)) { $_GET['cid'] = $row['cid']; $_GET['id'] = $row['id']; return true; } }elseif( isset($mat['hashids']) ) { // {hashids} $newurl = hashids_decrypt($mat['hashids']);//解密得到 cid id 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['cid'] = $newurl[0]; $_GET['id'] = $newurl[1]; return true; } } // 比如article/id.html,只能一个文章模型(多模型的不行,没法区分id属于那个模型的),因此丢到最后 if ( isset($mat['id']) && $this->integer_check($mat['id']) ){ $u_arr = explode('/', $uri); if( substr($cfg['link_show'], 0, strlen($u_arr[0])) == $u_arr[0] ){ $_GET['mid'] = 2; $_GET['id'] = $mat['id']; return true; } } } break; case 8: //HashIDS $newurl = hashids_decrypt($newurl);//解密得到 cid id 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['cid'] = $newurl[0]; $_GET['id'] = $newurl[1]; return true; } break; } unset($_GET['control']); unset($_GET['action']); return false; } //标签URL解析 protected function tag_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_tag_pre']); if(substr($uri, 0, $len) == $cfg['link_tag_pre']) { $len2 = strlen($cfg['link_tag_end']); if(substr($uri, -$len2) == $cfg['link_tag_end']) { $_GET['control'] = 'tag'; $_GET['action'] = 'index'; $newurl = substr($uri, $len, -$len2); $u_arr = explode('/', $newurl); $u_arr_count = count($u_arr); if($u_arr_count > 2){ core::error404(); } //分页 if( isset($u_arr[1]) ){ $page = $this->page_check($u_arr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } switch ($cfg['link_tag_type']){ case 0: preg_match('/^(\d+)\_(.+)$/i', $u_arr[0], $mat); if( isset($mat[2]) ) { if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = $mat[1]; $_GET['name'] = $mat[2]; return true; }else{ $_GET['mid'] = 2; $_GET['name'] = $u_arr[0]; return true; } break; case 1: preg_match("/^(\d+)\_(\d+)$/i", $u_arr[0], $mat); if( isset($mat[2]) ) { if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = $mat[1]; $_GET['tagid'] = $mat[2]; return true; }elseif( $this->integer_check($u_arr[0]) ){ $_GET['mid'] = 2; $_GET['tagid'] = $u_arr[0]; return true; } break; case 2: $newurl = decrypt($u_arr[0]);//解密得到 mid_tagid preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ){ if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = (int)$mat[1]; $_GET['tagid'] = (int)$mat[2]; return true; } break; case 3: $newurl = hashids_decrypt($u_arr[0]);//解密得到 mid tagid 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['mid'] = (int)$newurl[0]; $_GET['tagid'] = (int)$newurl[1]; return true; } break; } }else{ //尝试301跳转到带后缀的链接试试看~ http_location($cfg['weburl'].$uri.$cfg['link_tag_end'], '301'); } } unset($_GET['control']); unset($_GET['action']); return false; } //搜索URL解析 protected function search_url($cfg = array(), $uri = ''){ if(substr($uri, 0, 7) == 'search/') { if(substr($uri, -1) != '/'){$uri .= '/';} $newurl = substr($uri, 7, -1); $uarr = explode('/', $newurl); //模型ID if(isset($uarr[0]) && substr($uarr[0], 0 ,4) == 'mid_'){ $mid = substr($uarr[0], 4); if($this->mid_check($mid, $cfg)){ $_GET['mid'] = $mid; array_shift($uarr); }else{ core::error404(); } }else{ $_GET['mid'] = 2; } //排除多余的参数 if(count($uarr) > 2){core::error404();} //关键词 $_GET['keyword'] = $uarr[0]; //分页 if( isset($uarr[1]) ){ $page = $this->page_check($uarr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } $_GET['control'] = 'search'; $_GET['action'] = 'index'; return true; } //搜索页面链接解析 $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, -$url_suffix_len) == $url_suffix && substr($uri, 0, -$url_suffix_len) == 'so') { $_GET['control'] = 'search'; $_GET['action'] = 'so'; return true; } return false; } //评论URL解析 protected function comment_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_comment_pre']); if(substr($uri, 0, $len) == $cfg['link_comment_pre']) { $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, -$url_suffix_len) == $url_suffix) { $newurl = substr($uri, $len, -$url_suffix_len); $u_arr = explode('_', $newurl); if(count($u_arr) > 1) { $_GET['control'] = 'comment'; $_GET['action'] = 'index'; $_GET['cid'] = $u_arr[0]; $_GET['id'] = $u_arr[1]; //分页 if(isset($u_arr[2])){ if($this->integer_check($u_arr[2])){ $_GET['page'] = $u_arr[2]; }else{ core::error404(); } } return true; } } } return false; } //首页分页URL解析 protected function index_page_url($cfg = array(), $uri = ''){ $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, 0, 6) == 'index_' && substr($uri, -$url_suffix_len) == $url_suffix) { $newurl = substr($uri, 0, -$url_suffix_len); preg_match("/^index_(\d+)$/i", $newurl, $mat); if( isset($mat[1]) ){ if(!$this->integer_check($mat[1])){core::error404();} $_GET['control'] = 'index'; $_GET['action'] = 'index'; $_GET['mid'] = 2; $_GET['page'] = $mat[1]; return true; } preg_match("/^index_(\d+)_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ){ if(!$this->mid_check($mat[1], $cfg)){core::error404();} if(!$this->integer_check($mat[2])){core::error404();} $_GET['control'] = 'index'; $_GET['action'] = 'index'; $_GET['mid'] = $mat[1]; $_GET['page'] = $mat[2]; return true; } } return false; } //热门标签 全部标签 URL解析 protected function tag_like_url($cfg = array(), $uri = ''){ // 热门标签 if($uri == $cfg['link_tag_top'] || $uri == $cfg['link_tag_top'].'/') { if($uri == $cfg['link_tag_top']){ http_location($cfg['weburl'].$uri.'/', '301'); } $_GET['control'] = 'tag'; $_GET['action'] = 'top'; return true; } //全部标签 if(substr($uri, 0, 8) == 'tag_all/' || substr($uri, 0, 7) == 'tag_all'){ if(substr($uri, -1) != '/'){ http_location($cfg['weburl'].$uri.'/', '301'); } $u_arr = explode('/', $uri); if($u_arr[0] != 'tag_all'){ core::error404(); }else{ unset($u_arr); } $_GET['control'] = 'tag'; $_GET['action'] = 'all'; $newurl = substr($uri, 8, -1); if($newurl){ if(is_numeric($newurl) && $newurl > 0){ $_GET['mid'] = 2; $_GET['page'] = $newurl; }else{ $u_arr = explode('_', $newurl); if(count($u_arr) > 2){core::error404();} if(!$this->mid_check($u_arr[0], $cfg)){core::error404();} $_GET['mid'] = $u_arr[0]; if(is_numeric($u_arr[1]) && $u_arr[1] > 0){ $_GET['page'] = $u_arr[1]; }else{ core::error404(); } } } return true; } return false; } //用户中心URL解析 protected function user_url($cfg = array(), $uri = ''){ $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); $newurl = substr($uri, 0, -$url_suffix_len); if( preg_match('/^user-[a-z0-9-]+$/i', $newurl) || preg_match('/^my-[a-z0-9-]+$/i', $newurl) ){ $u_arr = explode('-', $newurl); if(count($u_arr) > 1) { $_GET['control'] = $u_arr[0]; array_shift($u_arr); $_GET['action'] = $u_arr[0]; array_shift($u_arr); $num = count($u_arr); for($i=0; $i<$num; $i+=2){ isset($u_arr[$i+1]) && $_GET[$u_arr[$i]] = $u_arr[$i+1]; } return true; } } return false; } //属性内容URL解析 protected function flags_url($cfg = array(), $uri = ''){ if(substr($uri, 0, 6) == 'flags/'){ if(substr($uri, -1) == '/'){$uri = substr($uri, 0,-1);} $u_arr = explode('/', $uri); if( isset($u_arr[1]) ){ $_GET['control'] = 'flags'; $_GET['action'] = 'index'; $u_arr_1 = explode('_', $u_arr[1]); if(isset($u_arr_1[1])){ $_GET['mid'] = $u_arr_1[0]; if(!$this->mid_check($_GET['mid'], $cfg)){core::error404();} $_GET['flag'] = $u_arr_1[1]; }else{ $_GET['mid'] = 2; $_GET['flag'] = $u_arr[1]; } if(!isset($this->cms_content->flag_arr[$_GET['flag']])){core::error404();} //分页 if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return true; } } return false; } //个人空间URL解析 protected function space_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_space_pre']); if(substr($uri, 0, $len) == $cfg['link_space_pre']) { $len2 = strlen($cfg['link_space_end']); if(substr($uri, -$len2) == $cfg['link_space_end']) { $newurl = substr($uri, $len, -$len2); $u_arr = explode('/', $newurl); if( $this->integer_check($u_arr[0]) ){ $_GET['control'] = 'space'; $_GET['action'] = 'index'; $_GET['uid'] = $u_arr[0]; //分页 if( isset($u_arr[1]) ){ $page = $this->page_check($u_arr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } } } } return false; } //动态URL解析 protected function other_url(){ if(isset($_GET['u'])) { $u = $_GET['u']; unset($_GET['u']); }elseif(!empty($_SERVER['PATH_INFO'])) { $u = R('PATH_INFO', 'S'); }else{ $_GET = array(); $u = R('QUERY_STRING', 'S'); } //清除URL后缀 $url_suffix = C('url_suffix'); if($url_suffix) { $suf_len = strlen($url_suffix); if(substr($u, -($suf_len)) == $url_suffix) $u = substr($u, 0, -($suf_len)); } $uarr = explode('&', $u); $u = $uarr[0]; if(count($uarr) > 1){ array_shift($uarr); foreach ($uarr as $v){ $varr = explode('=', $v); $_GET[$varr[0]] = isset($varr[1]) ? urldecode($varr[1]) : ''; } } unset($uarr); $uarr = explode('-', $u); if(count($uarr) < 2) {core::error404();} //控制器 if(isset($uarr[0])) { $_GET['control'] = empty($uarr[0]) ? 'index': strtolower($uarr[0]); array_shift($uarr); } //方法 if(isset($uarr[0])) { $_GET['action'] = empty($uarr[0]) ? 'index': strtolower($uarr[0]); array_shift($uarr); } //伪静态下 访问动态首页、内容页URL、分类URL、标签URL 则进入404页面 $dis_control = array('index', 'show', 'cate', 'tag'); if( in_array($_GET['control'], $dis_control) && $_GET['action'] == 'index'){ core::error404(); } //参数 $num = count($uarr); for($i=0; $i<$num; $i+=2){ isset($uarr[$i+1]) && $_GET[$uarr[$i]] = $uarr[$i+1]; } return false; } //分页参数验证 private function page_check($param){ if(empty($param)){ return false; }else{ preg_match('/^page_([1-9]\d*)$/', $param, $mat); if(isset($mat[1])){ return $mat[1]; }else{ return false; } } } //正整数参数验证 private function integer_check($param){ if(empty($param)){ return false; }elseif( preg_match($this->integer_pattern, $param) ){ return true; }else{ return false; } } //模型ID验证(不含单页) private function mid_check($mid, $cfg){ if($mid > 1 && isset($cfg['table_arr'][$mid])){ return true; }else{ return false; } } } Lecms 3.0.3 错误

错误信息

  • 消息: [程序异常] : 类 parseurl_control 不存在
  • 文件: /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/core.class.php
  • 位置: 第115行

错误位置

    #111        }elseif(is_file(FRAMEWORK_PATH.'ext/network/'.$classname.'.php')) {
    #112            include FRAMEWORK_PATH.'ext/network/'.$classname.'.php';
    #113        }else{
    #114            if(!defined('VENDOR')){
    #115                throw new Exception("类 $classname 不存在");
    #116            }
    #117        }
    #118        DEBUG && $_ENV['_include'][] = $classname.' 类';
    #119        return class_exists($classname, false);
    #120    }

基本信息

  • 模型: /www/wwwroot/www.tangqie.com/lecms/model/
  • 视图: /www/wwwroot/www.tangqie.com/view/default/
  • 控制器: /www/wwwroot/www.tangqie.com/lecms/control/_control.class.php
  • 日志目录: /www/wwwroot/www.tangqie.com/runcache/logs/

程序流程

  • #0 [internal function]: core::autoload_handler()
  • #1 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/core.class.php(196): spl_autoload_call()
  • #2 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/core.class.php(125): core::parseurl_control()
  • #3 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/core.class.php(10): core::init_get()
  • #4 /www/wwwroot/www.tangqie.com/lecms/xiunophp/xiunophp.php(101): core::init_start()
  • #5 /www/wwwroot/www.tangqie.com/index.php(20): require('/www/wwwroot/ww...')
  • #6 {main}

SQL

    $_GET

    • #rewrite => mingzi/车/诚.html

    $_POST

      $_COOKIE

      • #server_name_session => 5f1a44ad60b78ad8a0ceb48aca6cae8a
      • #PHPSESSID => rlsp2mbjbbj7ukh138s9ki08bf

      包含文件

      • #0 /www/wwwroot/www.tangqie.com/index.php
      • #1 /www/wwwroot/www.tangqie.com/lecms/xiunophp/xiunophp.php
      • #2 /www/wwwroot/www.tangqie.com/lecms/config/config.inc.php
      • #3 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/base.func.php
      • #4 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/core.class.php
      • #5 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/debug.class.php
      • #6 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/log.class.php
      • #7 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/model.class.php
      • #8 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/view.class.php
      • #9 /www/wwwroot/www.tangqie.com/lecms/xiunophp/lib/control.class.php
      • #10 /www/wwwroot/www.tangqie.com/lecms/xiunophp/db/db.interface.php
      • #11 /www/wwwroot/www.tangqie.com/lecms/xiunophp/db/db_pdo_mysql.class.php
      • #12 /www/wwwroot/www.tangqie.com/lecms/xiunophp/cache/cache.interface.php
      • #13 /www/wwwroot/www.tangqie.com/lecms/xiunophp/cache/cache_memcache.class.php
      • #14 /www/wwwroot/www.tangqie.com/lecms/xiunophp/ext/network/Network__interface.php
      • #15 /www/wwwroot/www.tangqie.com/lecms/config/plugin.inc.php
      • #16 /www/wwwroot/www.tangqie.com/lecms/plugin/editor_sd/conf.php
      • #17 /www/wwwroot/www.tangqie.com/lecms/plugin/editor_um/conf.php
      • #18 /www/wwwroot/www.tangqie.com/lecms/plugin/import_data/conf.php
      • #19 /www/wwwroot/www.tangqie.com/lecms/plugin/le_auto_alias/conf.php
      • #20 /www/wwwroot/www.tangqie.com/lecms/plugin/le_baidu_zz/conf.php
      • #21 /www/wwwroot/www.tangqie.com/lecms/plugin/le_category_filter/conf.php
      • #22 /www/wwwroot/www.tangqie.com/lecms/plugin/le_dis_copy/conf.php
      • #23 /www/wwwroot/www.tangqie.com/lecms/plugin/le_drafts/conf.php
      • #24 /www/wwwroot/www.tangqie.com/lecms/plugin/le_guoxue/conf.php
      • #25 /www/wwwroot/www.tangqie.com/lecms/plugin/le_huangli/conf.php
      • #26 /www/wwwroot/www.tangqie.com/lecms/plugin/le_huilv/conf.php
      • #27 /www/wwwroot/www.tangqie.com/lecms/plugin/le_hzhtime/conf.php
      • #28 /www/wwwroot/www.tangqie.com/lecms/plugin/le_links/conf.php
      • #29 /www/wwwroot/www.tangqie.com/lecms/plugin/le_quming_pro/conf.php
      • #30 /www/wwwroot/www.tangqie.com/lecms/plugin/le_rand404content/conf.php
      • #31 /www/wwwroot/www.tangqie.com/lecms/plugin/le_sitemaps/conf.php
      • #32 /www/wwwroot/www.tangqie.com/lecms/plugin/le_spider/conf.php
      • #33 /www/wwwroot/www.tangqie.com/lecms/plugin/le_spider_access/conf.php
      • #34 /www/wwwroot/www.tangqie.com/lecms/plugin/le_super_sitemap/conf.php
      • #35 /www/wwwroot/www.tangqie.com/lecms/plugin/le_tag_links/conf.php
      • #36 /www/wwwroot/www.tangqie.com/lecms/plugin/le_title_fenci/conf.php
      • #37 /www/wwwroot/www.tangqie.com/lecms/plugin/le_title_pic/conf.php
      • #38 /www/wwwroot/www.tangqie.com/lecms/plugin/le_twcms_seo/conf.php
      • #39 /www/wwwroot/www.tangqie.com/lecms/plugin/le_view_original/conf.php
      • #40 /www/wwwroot/www.tangqie.com/lecms/plugin/le_website_group_pro/conf.php
      • #41 /www/wwwroot/www.tangqie.com/lecms/plugin/le_wjt/conf.php
      • #42 /www/wwwroot/www.tangqie.com/lecms/plugin/le_youbian/conf.php
      • #43 /www/wwwroot/www.tangqie.com/lecms/plugin/models_filed/conf.php
      • #44 /www/wwwroot/www.tangqie.com/lecms/plugin/xn_tag/conf.php
      • #45 /www/wwwroot/www.tangqie.com/runcache/misc.func.php
      • #46 /www/wwwroot/www.tangqie.com/runcache/core_lang/zh-cn.php
      • #47 /www/wwwroot/www.tangqie.com/runcache/lang/zh-cn.php
      • #48 /www/wwwroot/www.tangqie.com/runcache/lecms_control/parseurl_control.class.php
      • #49 /www/wwwroot/www.tangqie.com/lecms/xiunophp/tpl/exception.php

      其他信息

      • 请求路径: /mingzi/%E8%BD%A6/%E8%AF%9A.html
      • 当前时间: 2026-04-09 16:48:56
      • 当前网协: 216.73.216.173
      • 运行时间: 1.8231
      • 内存开销: 895.31 KB
        Lecms 3.0.3