<?php
/*
*源码哥:www.ymg6.com
*更多商业插件/模版免费下载 就在源码哥
*本资源来源于网络收集,仅供个人学习交流,请勿用于商业用途,并于下载24小时后删除!
*如果侵犯了您的权益,请及时告知我们,我们即刻删除!
*/
if(!defined('IN_DISCUZ') || !defined('IN_ADMINCP')) {
exit('Access Denied');
}
if(in_array($_GET['poperation'],array('download'))){
$poperation=$_GET['poperation'];
}else{
$poperation='';
}
$_config['addonsource'] = 'xx1';
$_config['addon'] = array(
'xx1' => array(
'website_url' => 'http://www.ymg6.com/addon.php',
'download_url' => 'http://www.ymg6.com/addon.php',
'download_ip' => '',
)
);
$addon = $_config['addon']['xx1'];
define('PCLOUDADDONS_WEBSITE_URL', $addon['website_url']);
define('PCLOUDADDONS_DOWNLOAD_URL', $addon['download_url']);
define('PCLOUDADDONS_DOWNLOAD_IP', $addon['download_ip']);
function pcloudaddons_md5($file) {
return dfsockopen(pcloudaddons_url('&ac=check&file=').$file, 0, '', '', false, PCLOUDADDONS_DOWNLOAD_IP, 60);
}
function pcloudaddons_getuniqueid() {
global $_G;
if(PCLOUDADDONS_WEBSITE_URL == 'http://www.ymg6.com/addon.php') {
return $_G['setting']['siteuniqueid'] ? $_G['setting']['siteuniqueid'] : C::t('common_setting')->fetch('siteuniqueid');
} else {
if(!$_G['setting']['addon_uniqueid']) {
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$addonuniqueid = $chars[date('y')%60].$chars[date('n')].$chars[date('j')].$chars[date('G')].$chars[date('i')].$chars[date('s')].substr(md5($_G['clientip'].TIMESTAMP), 0, 4).random(6);
C::t('common_setting')->update('addon_uniqueid', $addonuniqueid);
require_once libfile('function/cache');
updatecache('setting');
}
return $_G['setting']['addon_uniqueid'];
}
}
function pcloudaddons_url($extra) {
global $_G;
require_once DISCUZ_ROOT.'./source/discuz_version.php';
$data = 'siteuniqueid='.rawurlencode(pcloudaddons_getuniqueid()).'&siteurl='.rawurlencode($_G['siteurl']).'&sitever='.DISCUZ_VERSION.'/'.DISCUZ_RELEASE.'&sitecharset='.CHARSET.'&mysiteid='.$_G['setting']['my_siteid'];
$param = 'data='.rawurlencode(base64_encode($data));
$param .= '&md5hash='.substr(md5($data.TIMESTAMP), 8, 8).'×tamp='.TIMESTAMP;
return PCLOUDADDONS_DOWNLOAD_URL.'?froms=bbs&'.$param.$extra.'&pdo='.$_GET['do'].'&pidentifier='.$_GET['identifier'];
}
function pcloudaddons_check() {
if(!function_exists('gzuncompress')) {
cpmsg('cloudaddons_check_gzuncompress_error', '', 'error');
}
foreach(array('download', 'addonmd5') as $path) {
$tmpdir = DISCUZ_ROOT.'./data/'.$path.'/'.random(5);
$tmpfile = $tmpdir.'/index.html';
dmkdir($tmpdir, 0777);
if(!is_dir($tmpdir) || !file_exists($tmpfile)) {
cpmsg('cloudaddons_check_write_error', '', 'error');
}
@unlink($tmpfile);
@rmdir($tmpdir);
if(is_dir($tmpdir) || file_exists($tmpfile)) {
cpmsg('cloudaddons_check_write_error', '', 'error');
}
}
}
function pcloudaddons_open($extra, $post = '', $timeout = 30) {
return dfsockopen(pcloudaddons_url('&from=s').$extra, 0, $post, '', false, PCLOUDADDONS_DOWNLOAD_IP, $timeout);
}
function pcloudaddons_getmd5($md5file) {
$array = array();
if(preg_match('/^[a-z0-9_\.]+$/i', $md5file) && file_exists(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml')) {
require_once libfile('class/xml');
$xml = implode('', @file(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml'));
$array = xml2array($xml);
} else {
return false;
}
return $array;
}
function pcloudaddons_savemd5($md5file, $end, $md5) {
global $_G;
parse_str($end, $r);
require_once libfile('class/xml');
$xml = implode('', @file(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml'));
$array = xml2array($xml);
$ridexists = false;
$data = array();
if($array['RevisionID']) {
foreach(explode(',', $array['RevisionID']) as $i => $rid) {
$sns = explode(',', $array['SN']);
$datalines = explode(',', $array['RevisionDateline']);
$data[$rid]['SN'] = $sns[$i];
$data[$rid]['RevisionDateline'] = $datalines[$i];
}
}
$data[$r['RevisionID']]['SN'] = $r['SN'];
$data[$r['RevisionID']]['RevisionDateline'] = $r['RevisionDateline'];
$array['Title'] = 'Discuz! Addon MD5';
$array['ID'] = $r['ID'];
$array['RevisionDateline'] = $array['SN'] = $array['RevisionID'] = array();
foreach($data as $rid => $tmp) {
$array['RevisionID'][] = $rid;
$array['SN'][] = $tmp['SN'];
$array['RevisionDateline'][] = $tmp['RevisionDateline'];
}
$array['RevisionID'] = implode(',', $array['RevisionID']);
$array['SN'] = implode(',', $array['SN']);
$array['RevisionDateline'] = implode(',', $array['RevisionDateline']);
$array['Data'] = $array['Data'] ? array_merge($array['Data'], $md5) : $md5;
if(!isset($_G['siteftp'])) {
dmkdir(DISCUZ_ROOT.'./data/addonmd5/', 0777, false);
$fp = fopen(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml', 'w');
fwrite($fp, array2xml($array));
fclose($fp);
} else {
$localfile = DISCUZ_ROOT.'./data/'.random(5);
$fp = fopen($localfile, 'w');
fwrite($fp, array2xml($array));
fclose($fp);
dmkdir(DISCUZ_ROOT.'./data/addonmd5/', 0777, false);
siteftp_upload($localfile, 'data/addonmd5/'.$md5file.'.xml');
@unlink($localfile);
}
}
function pcloudaddons_comparetree($new, $old, $basedir, $md5file ='', $first = 0) {
global $_G;
if($first && file_exists(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml')) {
require_once libfile('class/xml');
$xml = implode('', @file(DISCUZ_ROOT.'./data/addonmd5/'.$md5file.'.xml'));
$array = xml2array($xml);
$_G['treeop']['md5old'] = $array['Data'];
}
$dh = opendir($new);
while(($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..') {
$newfile = $new.'/'.$file;
$oldfile = $old.'/'.$file;
if(is_file($newfile)) {
$oldfile = preg_replace('/\._addons_$/', '', $oldfile);
$md5key = str_replace($basedir, '', preg_replace('/\._addons_$/', '', $newfile));
$newmd5 = md5_file($newfile);
$oldmd5 = file_exists($oldfile) ? md5_file($oldfile) : '';
if(isset($_G['treeop']['md5old'][$md5key]) && $_G['treeop']['md5old'][$md5key] != $oldmd5 && $oldmd5) {
$_G['treeop']['oldchange'][] = $md5key;
}
if($newmd5 != $oldmd5) {
$_G['treeop']['copy'][] = $newfile;
}
$_G['treeop']['md5'][$md5key] = $newmd5;
} else {
pcloudaddons_comparetree($newfile, $oldfile, $basedir);
}
}
}
}
function pcloudaddons_copytree($from, $to) {
global $_G;
$dh = opendir($from);
while(($file = readdir($dh)) !== false) {
if($file != '.' && $file != '..') {
$readfile = $from.'/'.$file;
$writefile = $to.'/'.$file;
if(is_file($readfile)) {
if(!in_array($readfile, $_G['treeop']['copy'])) {
continue;
}
if(!isset($_G['siteftp'])) {
$content = -1;
if($fp = @fopen($readfile, 'r')) {
$startTime = microtime();
do {
$canRead = flock($fp, LOCK_SH);
if(!$canRead) {
usleep(round(rand(0, 100) * 1000));
}
} while ((!$canRead) && ((microtime() - $startTime) < 1000));
if(!$canRead) {
cpmsg('cloudaddons_file_read_error', '', 'error');
}
$content = fread($fp, filesize($readfile));
flock($fp, LOCK_UN);
fclose($fp);
}
if($content < 0) {
cpmsg('cloudaddons_file_read_error', '', 'error');
}
dmkdir(dirname($writefile), 0777, false);
$writefile = preg_replace('/\._addons_$/', '', $writefile);
if($fp = fopen($writefile, 'w')) {
$startTime = microtime();
do {
$canWrite = flock($fp, LOCK_EX);
if(!$canWrite) {
usleep(round(rand(0, 100) * 1000));
}
} while ((!$canWrite) && ((microtime() - $startTime) < 1000));
if(!$canWrite) {
cpmsg('cloudaddons_file_write_error', '', 'error');
}
f