PLUGIN_PATH.'/data')));
$msg = dfsockopen(GET_URL.'plugin.php?id=seotool_server:flink&tpl=no&myac=get_key&inajax=1&siteurl='.urlencode($siteurl));
$msg = st_ajax_decode($msg);
if($msg->status == -4) cpmsg_error(stlang('key_code_err4'));
if($msg->status < 1) cpmsg_error(stlang('key_code_err', array('c' => $msg->status)));
@unlink($key_file);
$key_code = $msg->key_code;
$c_data = array('domain' => $client_info['domain'], 'key_code' => $key_code);
writetocache('milu_seotool_key', getcachevars(array('c_data' => serialize($c_data))),'');
$c_data['version'] = PLUGIN_VERSION;
return $c_data;
}
function GetHostInfo($gurl){
$gurl = preg_replace("/^http:\/\//i", "", trim($gurl));
$garr['host'] = preg_replace("/\/(.*)$/i", "", $gurl);
$garr['query'] = "/".preg_replace("/^([^\/]*)\//i", "", $gurl);
return $garr;
}
function get_user_system(){
$c_info = get_client_info();
$url = GET_URL.'plugin.php?id=seotool_server:pick_user&myac=auth&detail=1&domain='.urlencode($c_info['domain']).'&siteurl='.urlencode($c_info['siteurl']).'&version='.PLUGIN_VERSION.'&discuz_version='.DISCUZ_VERSION.'&discuz_release='.DISCUZ_RELEASE.'&release='.V_D.'&sitename='.urlencode($c_info['sitename']);
return st_get_contents($url, array('cache' => -1));
}
function get_user_level(){
global $_G;
$status = 0;
$name = stlang('free_user');
$file_name = PLUGIN_DIR.'/data/plugin_auth.txt';
$msg_arr = array();
$vip_show = '
'.stlang('vip_user').' ';
$msg_arr = get_user_system();
if($msg_arr < 0){
$status = -1;
$name = stlang('no_query_info');
}
$web_qq = st_get_contents(GET_URL.'plugin.php?id=seotool_server:upgrade&myac=get_qq&tpl=no', array('cache' => 3600*24*2) );
$msg_arr = unserialize($msg_arr);
extract($msg_arr);
$show_use_time = $exp_dateline ? " ".stlang('no_user_dateline').":".dgmdate($exp_dateline).'' : '';
if($msg == 'succeed'){
dsetcookie('plugin_auth', $msg, -1);
$show_use_time = $show_use_time ? $show_use_time : stlang('forever_use');
$name = $vip_show.$show_use_time;
$status = 1;
}else if($msg == 'timeout'){
@unlink($file_name);
$name = stlang('no_free_use');
$status = -2;
}else if($msg == 'free' || $msg == 'first'){//如果是免费版本
if(VIP){
$status = 2;
$name = stlang('free_use').' '.$show_use_time;
}
}else{
$status = -3;
if($msg == 'error'){
$why = stlang('lan_network');
}else{
$why = stlang('no_conn_server');
}
$name = stlang('user_no_query').' ('.$why.')';
}
if($status < 0){
$show_upgrade = '';//服务器网络限制,无法检测升级
}else{
$show_upgrade = VIP ? ''.stlang('check_new').'' : ''.stlang('up_to_vip').'';
}
$re['show_user_name'] = $name;
$re['show_upgrade'] = $show_upgrade;
$re['status'] = $status;
$re['web_qq'] = $web_qq;
return $re;
}
function version_check(){
global $_G;
$check = $_G['cache']['plugin']['milu_seotool']['check_version'];
if(!VIP || $check != 1) return FALSE;
$get_site = GET_URL;
$client_info = get_client_info();
if(!$client_info || !$client_info['domain']) return;
$tips_arr = tool_common_get('plugin_tips');
if($tips_arr['check_version']) return;
if(st_load_cache('check_version')) return;
$url = GET_URL.'plugin.php?id=seotool_server:upgrade&myac=check_version&tpl=no&php_version='.phpversion().'&version='.$client_info['version'].'&release='.$client_info['release'];
$result = st_get_contents($url, array('cache' => -1));
st_cache_data('check_version', 'ok', 5*3600);
if($result == 'ok'){
return seoOutput::show_tips('
'.stlang('have_new_version', array('url' => '?'.PLUGIN_GO.'system&ac=plugin_check&checking=1')).'', array('key' => 'check_version', 'w' => 380, 'h' => 250));
}
}
function plugin_check(){
global $_G;
if(!$_GET['checking']) cpmsg(stlang('upgrade_checking'), PLUGIN_GO.'system&ac=plugin_check&checking=1', 'loading', '', false);
$zend_check = is_zend();
if($zend_check == -1){
cpmsg_error(lang('plugin/milu_seotool','http_visit', array('file' => 'source/plugin/milu_seotool/zend/zendcheck.php')) );
}else if($zend_check == -2){
cpmsg_error(lang('plugin/milu_seotool', 'zend_enable'));
}
$key_file = PLUGIN_PATH.'/data/key.php';
file_put_contents($key_file, $_G['timestamp']);
if(!file_exists($key_file)) cpmsg_error(stlang('dir_no_write', array('dir' => PLUGIN_PATH.'/data')));
$get_site = GET_URL;
$client_info = get_client_info();
if(!$client_info || !$client_info['domain']) cpmsg_error(stlang('lan_upgrage'));
$url = GET_URL.'plugin.php?id=seotool_server:upgrade&myac=upgrade_check&tpl=no&get_type=1&php_version='.phpversion().'&domain='.urlencode($client_info['domain']).'&version='.$client_info['version'].'&release='.$client_info['release'].'&siteurl='.urlencode($client_info['siteurl']);
$msg_arr = st_get_contents($url, array('cache' => -1));
@unlink($key_file);
if($msg_arr < 0) cpmsg_error(stlang('no_conn_up'));
$msg_arr = json_decode(base64_decode($msg_arr));
$status = $msg_arr->status;
if(!$status) {
cpmsg_error(stlang('up_no_err'));
}
if($status == -1) {
cpmsg_error(stlang('up_no_free'));
}else if($status == -2) {
cpmsg_error(stlang('up_no_set_err'));
}else if($status == -3){
cpmsg_error(stlang('up_newed'));
}else if($status == -4 || !$msg_arr->key){
cpmsg_error(stlang('no_normal_up'));
}else{
$version_desc = base64_decode(dstripslashes($msg_arr->version_desc));
$msg_arr->version_filename = base64_decode(dstripslashes($msg_arr->version_filename));
}
echo '';
echo '';
if($version_desc){
$version_desc = $version_desc ? $version_desc : stlang('no_have');
echo ''.stlang('up_notice').'
'.st_str_iconv($version_desc).'
';
}
exit();
}
function plugin_download(){
$client_info = get_client_info();
$version_md5total = $_GET['md5_total'];
$key = $_GET['key'];
$version = $_GET['version'];
$version_dateline = $_GET['version_dateline'];
$i = intval($_GET['i']);
if(!$client_info) cpmsg_error(stlang('lan_upgrage'));
$p = intval($_GET['p']);
$count = $_GET['count'];
$file_md5 = $_GET['file_md5'];
$tmpdir = DISCUZ_ROOT.'./data/download/dxc_temp';
sload('C:cache');
$md5s = array();
$str = $_SERVER['QUERY_STRING'];
if($p == 0) {
dir_clear($tmpdir);
st_cache_del('new_version_md5total');
dmkdir($tmpdir, 0777, false);
cpmsg(stlang('diff_upgrade_file'), PLUGIN_GO.'system&ac=plugin_download&key='.$key.'&p=1', 'loading', '', false);
}else if($p == 1){
$url = GET_URL.'plugin.php?id=seotool_server:upgrade&myac=download_file&php_version='.phpversion().'&tpl=no&domain='.urlencode($client_info['domain']).'&key='.$key.'&file_md5='.$file_md5;
$data = st_get_contents($url, array('cache' => -1));
if(!$data || $data == '-1' ) cpmsg_error(stlang('no_normal_get'));
$msg_arr = (array)json_decode(base64_decode($data));
if(!$_GET['file_md5']){
$download_file_data = upgrade_file_diff($msg_arr['md5']);
$md5_temp_arr = array_keys($download_file_data);
$version_md5total = md5((implode('', $md5_temp_arr)));
$count = count($download_file_data);
$version = $version ? $version : $msg_arr['Version'];
$version_dateline = $version_dateline ? $version_dateline : $msg_arr['version_dateline'];
}else{
$download_file_data = st_load_cache('download_file_data');
$new_version_md5total = st_load_cache('new_version_md5total');
$filename = $tmpdir.'/'.$msg_arr['file'].'._addons_';
$dirname = dirname($filename);
dmkdir($dirname, 0777, false);
$fp = fopen($filename, 'w');
if(!$fp) {
cpmsg('cloudaddons_download_write_error', '', 'error');
}
if($msg_arr['text']) {
fwrite($fp, gzuncompress(base64_decode($msg_arr['text'])));
fclose($fp);
}else{
cpmsg('cloudaddons_download_write_error', '', 'error');
}
if($msg_arr['MD5']) {
$new_version_md5total[$i] = $msg_arr['MD5'];
if($msg_arr['MD5'] != md5_file($filename)) {
dir_clear($tmpdir);
cpmsg(stlang('cloudaddons_download_error'), '', 'error');//数据下载错误
}
}else{
cpmsg_error(stlang('no_normal_get').'error203');
}
}
$file_md5_arr = array_keys($download_file_data);
$file_md5 = $file_md5_arr[$i];
$file = $download_file_data[$file_md5];
$p = $i == $count ? 2 : 1;
$percent = $i/$count;
$percent = sprintf("%01.0f", $percent*100).'%';
st_cache_data('download_file_data', $download_file_data);
st_cache_data('new_version_md5total', $new_version_md5total);
cpmsg(stlang('pick_upgrade_downloading_file', array('file' => $file, 'percent' => $percent)), PLUGIN_GO.'system&ac=plugin_download&i='.($i+1).'&md5_total='.$version_md5total.'&key='.$key.'&p='.$p.'&version='.$version.'&version_dateline='.$version_dateline.'&count='.$count.'&file_md5='.$file_md5, 'loading', '', false);
}else if($p == 2){
if(!$_GET['new_md5_total']){
$new_version_md5total = st_load_cache('new_version_md5total');
$new_version_md5total = implode('', $new_version_md5total);
}else{
$new_version_md5total = $_GET['new_md5_total'];
}
if($new_version_md5total !== '' && md5($new_version_md5total) !== $version_md5total) {
dir_clear($tmpdir);
cpmsg(stlang('cloudaddons_download_error'), '', 'error');//数据下载错误
}
cpmsg(stlang('_installing'), PLUGIN_GO.'system&ac=plugin_install&version='.$version.'&version_dateline='.$version_dateline, 'loading', '', false);
}
}
function upgrade_file_diff($md5_data){
$md5_data = (array) $md5_data;
if(!$md5_data) return array();
foreach($md5_data as $k => $v){
if(md5(file_get_contents(PLUGIN_DIR.'/'.$v)) == $k) unset($md5_data[$k]);
}
return $md5_data;
}
function plugin_install(){
global $_G;
$tmpdir = DISCUZ_ROOT.'./data/download/dxc_temp';
if(!is_dir($tmpdir)) {
cpmsg(stlang('cloudaddons_download_error'), '', 'error');//数据下载错误
}
$_GET['type'] = 'plugin';
$_GET['key'] = 'milu_seotool';
$to_version = $_GET['version'];
$to_version_dateline = $_GET['version_dateline'];
if(!libfile('function/cloudaddons')) exit('error01:file not found');
require_once libfile('function/cloudaddons');
$descdir = DISCUZ_ROOT.'source/plugin/';
$subdir = 'milu_seotool';
$unwriteabledirs = cloudaddons_dirwriteable($descdir, $subdir, $tmpdir);
if($unwriteabledirs) {//目录不可写
showtips(stlang('cloudaddons_unwriteabledirs', array('basedir' => 'source/plugin', 'unwriteabledirs' => implode(', ', $unwriteabledirs))));
exit;
}
$descdir .= $subdir;
cloudaddons_comparetree($tmpdir, $descdir, $tmpdir, $_GET['key'].'.'.$_GET['type'].'vip', 1);
if(!empty($_G['treeop']['oldchange']) && empty($_GET['confirmed'])) {
cpmsg(stlang('cloudaddons_install_files_changed', array('files' => implode('
', $_G['treeop']['oldchange']))), '', 'form', '');
}
cloudaddons_copytree($tmpdir, $descdir);
$client_info = get_client_info();
$_GET['end'] = 'Status=End&ID=milu_seotool_vip.plugin&SN='.$client_info['domain'].'&RevisionID='.$client_info['domain'].'&RevisionDateline='.$client_info['domain'];
cloudaddons_savemd5($_GET['key'].'.'.$_GET['type'].'vip', $_GET['end'], $_G['treeop']['md5']);
cloudaddons_deltree($tmpdir);
//成功之后的一些动作
$set['check_version'] = 0;
tool_common_set('plugin_tips', $set);
$charset = str_replace('-', '', strtoupper($_G['config']['output']['charset']));
$locale = '';
if($charset == 'BIG5') {
$locale = 'TC';
} elseif($charset == 'GBK') {
$locale = 'SC';
} elseif($charset == 'UTF8') {
if($_G['config']['output']['language'] == 'zh_cn') {
$locale = 'SC';
} elseif($_G['config']['output']['language'] == 'zh_tw') {
$locale = 'TC';
}
}
$xml_ext = 'discuz_plugin_milu_seotool_'.$locale.'_'.$charset.'.xml';
$xml_file = $descdir.'/'.$xml_ext;
if(!file_exists($xml_file)) cpmsg(stlang('xml_no_found', array('f' => $xml_ext)), '', 'error');//xml文件丢失
require_once libfile('class/xml');
$data = file_get_contents($xml_file);
$data_arr = xml2array($data);
$xml_data = exportarray($data_arr['Data'], 0);
$installtype = $locale.'_'.$charset;
pluginupgrade($xml_data, $installtype);
$auth_file = PLUGIN_DIR.'/data/plugin_auth.txt';
$upgrade_file = $descdir.'/upgrade.php';
if(file_exists($upgrade_file)) {
$_GET['fromversion'] = PLUGIN_VERSION;
include($upgrade_file);
if(!$finish) cpmsg_error(stlang('up_fail'));
}
@unlink($auth_file);
cpmsg('plugins_upgrade_succeed', PLUGIN_GO."system", 'succeed', array('toversion' => $to_version.' '.$to_version_dateline));
}
function num_limit($table_name, $limit_num, $lang){
$f_num = DB::result(DB::query("SELECT COUNT(*) FROM ".DB::table($table_name)), 0);
if(!VIP && $f_num > $limit_num) cpmsg_error(stlang($lang, array('n' => $limit_num)));
}
class RootDomain{
private static $self;
private $domain=null;
private $host=null;
private $state_domain;
private $top_domain;
/**
* 取得域名分析实例
* Enter description here ...
*/
public static function instace(){
if(!self::$self)
self::$self=new self();
return self::$self;
}
private function __construct(){
$this->state_domain = array(
'al','dz','af','ar','ae','aw','om','az','eg','et','ie','ee','ad','ao','ai','ag','at','au','mo','bb','pg','bs','pk','py','ps','bh','pa','br','by','bm','bg','mp','bj','be','is','pr','ba','pl','bo','bz','bw','bt','bf','bi','bv','kp','gq','dk','de','tl','tp','tg','dm','do','ru','ec','er','fr','fo','pf','gf','tf','va','ph','fj','fi','cv','fk','gm','cg','cd','co','cr','gg','gd','gl','ge','cu','gp','gu','gy','kz','ht','kr','nl','an','hm','hn','ki','dj','kg','gn','gw','ca','gh','ga','kh','cz','zw','cm','qa','ky','km','ci','kw','cc','hr','ke','ck','lv','ls','la','lb','lt','lr','ly','li','re','lu','rw','ro','mg','im','mv','mt','mw','my','ml','mk','mh','mq','yt','mu','mr','us','um','as','vi','mn','ms','bd','pe','fm','mm','md','ma','mc','mz','mx','nr','np','ni','ne','ng','nu','no','nf','na','za','aq','gs','eu','pw','pn','pt','jp','se','ch','sv','ws','yu','sl','sn','cy','sc','sa','cx','st','sh','kn','lc','sm','pm','vc','lk','sk','si','sj','sz','sd','sr','sb','so','tj','tw','th','tz','to','tc','tt','tn','tv','tr','tm','tk','wf','vu','gt','ve','bn','ug','ua','uy','uz','es','eh','gr','hk','sg','nc','nz','hu','sy','jm','am','ac','ye','iq','ir','il','it','in','id','uk','vg','io','jo','vn','zm','je','td','gi','cl','cf','cn','yr', 'co.nz'
);
$this->top_domain=array('com','arpa','edu','gov','int','mil','net','org','biz','info','pro','name','museum','coop','aero','xxx','idv','me','mobi');
}
public function setUrl( $url = ''){
if(empty($url)) FALSE;;
if(!preg_match("/^http:/is", $url))
$url="http://".$url;
$url=parse_url(strtolower($url));
$urlarr=explode(".", $url['host']);
$count=count($urlarr);
if ($count<=2){
$this->domain=$url['host'];
}else if ($count>2){
$last=array_pop($urlarr);
$last_1=array_pop($urlarr);
if(in_array($last, $this->top_domain)){
$this->domain=$last_1.'.'.$last;
$this->host=implode('.', $urlarr);
}else if(in_array($last_1.'.'.$last, $this->state_domain)){
$last_2=array_pop($urlarr);
$this->domain=$last_2.'.'.$last_1.'.'.$last;
$this->host=implode('.', $urlarr);
}else if (in_array($last, $this->state_domain)){
$last_2=array_pop($urlarr);
if(in_array($last_1, $this->top_domain)){
$this->domain=$last_2.'.'.$last_1.'.'.$last;
$this->host=implode('.', $urlarr);
}else{
$this->host=implode('.', $urlarr).$last_2;
$this->domain=$last_1.'.'.$last;
}
}
}
return $this;
}
public function getDomain(){
return $this->domain;
}
public function getHost(){
return $this->host;
}
}
function tips_no($key = ''){
$key = $key ? $key : $_GET['key'];
$set[$key] = 1;
tool_common_set('plugin_tips', $set);
return 'ok';
}
function is_zend(){
global $_G;
if(VIP) return 1;//如果是vip不检测
if(file_exists(DISCUZ_ROOT.'/api/addons/zendcheck.php')){
$zend_check = dfsockopen($_G['siteurl'].'api/addons/zendcheck.php');//discuz自带的zend检测文件大部分用户因为没有用二进制上传而导致文件无效。所以根据这个来判断并不准确
if($zend_check){
preg_match('/s=\'(.*?)\';v=\'(.*?)\';/is', $zend_check, $v_arr);
if($v_arr[1] == 'OK') return 1;
}
}
if (extension_loaded('Zend Optimizer') || extension_loaded('Zend Guard Loader') || get_cfg_var("zend_extension")||get_cfg_var("zend_optimizer.optimization_level")||get_cfg_var("zend_extension_manager.optimizer_ts")||get_cfg_var("zend_extension_ts")){
return 1;
}
return -2;
}
?>