栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > 齐博CMS

服务器性能太差,调整系统升级每次校验的文件数 - 齐博CMS之X1

齐博CMS 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

服务器性能太差,调整系统升级每次校验的文件数 - 齐博CMS之X1

系统升级需要校验本地的文件是否被修改过,系统默认每次检验1千个文件,一般来说需要分四到五页来处理,如下图所示。
![](https://img.kancloud.cn/28/1c/281cf01028c03ab48c4257d1831e6969_779x573.png)

如果你的服务器性能太差的话,就需要手工把数值调小。把下面的代码复制出来。进入后台数据库管理工具那里执行一下,导入数据库。然后就可以在后台核心设置那里修改数值


INSERT INTO `qb_config` (`id`, `type`, `title`, `c_key`, `c_value`, `form_type`, `options`, `ifsys`, `htmlcode`, `c_descrip`, `list`, `sys_id`) VALUES(0, 1, '系统升级每次核对文件数', 'sys_update_filenum', '10', 'number', '', 1, '', '留空则默认是1000,如果你的空间性能太差,就手工调为50甚至10', 0, 0);


导入数据库后,需要在下面那里做设置,如下图
![](https://img.kancloud.cn/72/04/7204fc2c177616ab79bcea12de95ac12_1287x315.png)

把数值相应调小,测试看看能否正常升级。

复制下面的代码修改两个文件后,将会实现如下图的效果.
![](https://img.kancloud.cn/7b/60/7b609728423159f721564bf8ae116d6c_1171x758.gif)

要实现分页检验文件的话,需要修改两个文件.

> 复制下面的代码替换`applicationadmincontrollerUpgrade.php`中的内容


namespace appadmincontroller;r
r
use appcommoncontrollerAdminbase;r
use appcommonmodelModule;r
use appcommonmodelPlugin;r
use appcommonmodelHook_plugin;r
use appcommonmodelMarket as MarketModel;r
use appcommonmodelTimedtask AS TaskModel;r
r
class Upgrade extends Adminbaser
{r
public function _initialize(){r
parent::_initialize();r
if(config('client_upgrade_edition')==''){r
config('client_upgrade_edition',RUNTIME_PATH . '/client_upgrade_edition.php');r
}r
}r
r
public function index()r
{r
$this->clean_cache();r
$array = @include(config('client_upgrade_edition'));r
$this->assign('upgrade',$array);r
return $this->fetch('index');r
}r
r
r
protected function clean_cache(){r
cache('timed_task',null);r
cache('cache_modules_config',null);r
cache('cache_plugins_config',null);r
cache('hook_plugins',null);r
}r
r
r
private function writelog($upgrade_edition=''){r
$data = $this->request->post();r
if($data['m']){r
$array = modules_config();r
foreach ($array AS $rs){r
$de = $data['m'][$rs['keywords']];r
if($de){r
$vs = $de['time']."t".$de['md5'];r
Module::update(['id'=>$rs['id'],'version'=>$vs]);r
}r
}r
}r
if($data['p']){r
$array = plugins_config();r
foreach ($array AS $rs){r
$de = $data['p'][$rs['keywords']];r
if($de){r
$vs = $de['time']."t".$de['md5'];r
Plugin::update(['id'=>$rs['id'],'version'=>$vs]);r
}r
}r
}r
if($data['h']){r
$array = cache('hook_plugins');r
foreach ($array AS $rs){r
$de = $data['h'][$rs['version_id']];r
if($de){r
$vs = $de['time']."t".$de['md5'];r
Hook_plugin::update(['id'=>$rs['id'],'version'=>$vs]);r
}r
}r
}r
if($data['t']){r
$array = cache('timed_task');r
foreach ($array AS $rs){r
$de = $data['t'][$rs['version_id']];r
if($de){r
$vs = $de['time']."t".$de['md5'];r
TaskModel::update(['id'=>$rs['id'],'version'=>$vs]);r
}r
}r
}r
$this->upgrade_mark($data['admin_style'],'admin_style');r
$this->upgrade_mark($data['index_style'],'index_style');r
$this->upgrade_mark($data['member_style'],'member_style');r
$this->upgrade_mark($data['qun_style'],'qun_style');r
$this->upgrade_mark($data['haibao_style'],'haibao_style');r
$this->upgrade_mark($data['model_style'],'model_style');r
$this->upgrade_mark($data['packet'],'packet');r
r
$this->clean_cache();r
if( file_put_contents(config('client_upgrade_edition'), '"'.$upgrade_edition.'","time"=>"'.date('Y-m-d H:i').'",];') ){r
return true;r
}else{r
return '权限不足,日志写入失败';r
}r
}r
r
r
private function upgrade_mark($data=[],$type=''){r
if($data){r
$array = MarketModel::get_list(['type'=>$type]);r
foreach ($array AS $rs){r
$de = $data[$rs['version_id']];r
if($de){r
$vs = $de['time']."t".$de['md5'];r
MarketModel::update(['id'=>$rs['id'],'version'=>$vs]);r
}r
}r
}r
}r
r
r
private function bakfile($filename=''){r
$bakpath = RUNTIME_PATH.'bakfile/';r
if(!is_dir($bakpath)){r
mkdir($bakpath);r
}r
$new_name = $bakpath.date('Y_m_d-H_i--').str_replace(['/','\'], '--', $filename);r
copy(ROOT_PATH.$filename,$new_name);r
}r
r
r
private function up_sql($filename=''){r
if(preg_match('/\/upgrade\/([w]+).sql$/', $filename)){r
//if(preg_match('/^\/application\/common\/upgrade\/([w]+).sql/', $filename)){r
into_sql(ROOT_PATH.$filename,true,0);r
}r
}r
r
r
private function up_run($filename=''){r
if(preg_match('/^\/application\/common\/upgrade\/([w]+).php$/', $filename)){r
$classname = "app\common\upgrade\".ucfirst(substr(basename($filename), 0,-4));r
}elseif( preg_match('/(application|plugins)\/([w]+)\/upgrade\/([w]+).php$/',$filename,$array) ){ //实际已包含了上面的r
$m_p = $array[1]=='application'?'app':'plugins';r
$model = $array[2];r
$file = $array[3];r
$classname = "$m_p\$model\upgrade\".ucfirst($file);r
}else{r
return;r
}r
if( class_exists($classname) && method_exists($classname, 'up') ){r
$obj = new $classname;r
try {r
$obj->up();r
} catch(Exception $e) {r
//echo $e;r
}r
}r
}r
r
r
r
public function sysup($filename='',$upgrade_edition=''){r
if($upgrade_edition){ //升级完毕,写入升级信息日志r
$result = $this->writelog($upgrade_edition);r
if( $result===true ){r
return $this->ok_js([],'升级成功');r
}else{r
return $this->err_js($result);r
}r
}r
list($filename,$id) = explode(',',$filename);r
if($filename==''){r
return $this->err_js('文件不存在!');r
}r
r
$str = $this->get_server_file($filename,$id);r
if($str){r
$filename = $this->format_filename($filename); //针对模块或插件的升级做替换处理r
$this->bakfile($filename);r
makepath(dirname(ROOT_PATH.$filename)); //检查并生成目录r
if( file_put_contents(ROOT_PATH.$filename, $str) ){r
$this->up_sql($filename);r
$this->up_run($filename);r
return $this->ok_js([],'文件升级成功');r
}else{r
return $this->err_js('目录权限不足,文件写入失败');r
}r
}else{r
return $this->err_js('获取云端数据失败,请确认服务器DNS是否正常,能否访问外网?');r
}r
}r
r
r
public function view_file($filename='',$id=0,$oldfile=''){r
r
$str = $this->get_server_file($filename,$id);r
r
if ( preg_match("/(.jpg|.png|.jpeg|.gif)$/i", $filename) ) {r
//header('Content-type:image/'.substr($filename,strripos($filename,'.')+1));echo $str;r
if (is_file(ROOT_PATH.$oldfile)) {r
echo "
";r
}r
$temp_file = "uploads/images/temp.".substr($filename,strripos($filename,'.')+1);r
file_put_contents(PUBLIC_PATH.$temp_file, $str);r
echo "

";r
exit;r
}r
r
$this->assign('new_code',str_replace(['<','>'], ['<','>'], $str));r
$this->assign('old_code', str_replace(['<','>'], ['<','>'], file_get_contents(str_replace('//', '/', ROOT_PATH.$oldfile)) ) );r
r
return $this->fetch();r
}r
r
r
protected function format_filename($filename=''){r
if(strstr($filename,'/../../')){r
$filename = str_replace(['/../../template/','/../../plugin/','/../../hook/'], '/../../', $filename);r
$filename = preg_replace('/^\/..\/..\/([w]+)/','/',$filename);r
}r
return $filename;r
}r
r
r
public function check_files($upgrade_edition='',$page=0,$rows=1000){r
if ($this->webdb['sys_update_filenum']>0) {r
$rows = $this->webdb['sys_update_filenum'];r
}r
set_time_limit(0); //防止超时r
$array = $this->getfile($page);r
if(empty($array)){r
$str = http_curl("https://x1.php168.com/appstore/upgrade/get_version.html?id=46");r
if (!strstr($str,'md5')) {r
return $this->err_js('你的服务器无法访问齐博官网,请检查你的服务器DNS是否配置正确,或者是否设置了防火墙不能访问外网');r
}r
return $this->err_js('获取云端文件列表数据失败,请晚点再偿试');r
}r
$totalpage = ceil(count($array)/$rows);r
if (!$page) {r
set_cookie('need_update',0);r
return $this->ok_js($totalpage);r
}r
$data = [];r
$min = ($page-1)*$rows;r
for($i=$min;$i<$min+$rows;$i++){r
$rs = $array[$i];r
if (!$rs) {r
break;r
}r
// }r
// foreach($array AS $rs){r
$showfile = $this->format_filename($rs['file']);r
$file = ROOT_PATH.$showfile;r
if (is_file($file.'.lock') && file_get_contents($file.'.lock')=='hide') {r
continue; //用户不想升级的文件,也不想提示升级r
}r
$ispic = false;r
$change = false;r
$md5_size = '';r
if (!is_file($file)) {r
$change = true;r
}elseif( ($md5_size=md5_file($file)) != $rs['md5'] ){r
$change = true;r
if ( preg_match("/(.jpg|.png|.jpeg|.gif)$/i", $file) ) {r
$ispic = true;r
}elseif ( check_bom($file,true) ) {r
file_put_contents($file, check_bom($file));r
if (md5_file($file)==$rs['md5']) {r
$change = false;r
}//elseif(preg_match("/(\/|\)upgrade(\/|\)([w]+)(.sql|.php)$/i", $file)){r
//$change = false;r
//}r
}r
}r
if($change){ r
$data[]=[r
'file'=>$rs['file'],r
'showfile'=>$showfile,r
'md5'=>$md5_size,r
'id'=>$rs['id'],r
'islock'=>(is_file($file.'.lock')||(is_file($file)&&preg_match("/(\/|\)upgrade(\/|\)([w]+)(.sql|.php)$/i", $file)))?1:0,r
'ctime'=>is_file($file)?date('Y-m-d H:i',filemtime($file)):'缺失的文件',r
'time'=>date('Y-m-d H:i',$rs['time']),r
];r
}r
}r
r
$array_sql = $array_php = [];r
foreach ($data AS $key=>$rs){r
if( preg_match("/\/upgrade\/([w]+.sql)/i",$rs['file']) ){r
unset($data[$key]);r
$array_sql[$rs['file']] = $rs;r
}elseif( preg_match("/\/upgrade\/([w]+.php)/i",$rs['file']) ){r
unset($data[$key]);r
$array_php[$rs['file']] = $rs;r
}r
}r
ksort($array_php);r
ksort($array_sql);r
$data = array_values(array_merge($data,$array_sql,$array_php));r
$need_update = get_cookie('need_update')+count($data);r
set_cookie('need_update',$need_update);r
r
if ($page==$totalpage) {r
unlink(RUNTIME_PATH.'updatelist.txt');r
}r
if($page==$totalpage && $need_update<1){r
$upgrade_edition && $reustl = $this->writelog($upgrade_edition);r
return $this->err_js($reustl!==true?$reustl:'没有可更新文件');r
}else{r
return $this->ok_js($data?:[]);r
}r
}r
r
r
protected function get_server_file($filename='',$id=0){r
@set_time_limit(600); //防止超时r
$str = http_curl('https://x1.php168.com/appstore/upgrade/make_client_file.html?filename='.$filename.'&id='.$id.'&appkey='.urlencode($this->webdb['mymd5']).'&domain='.urlencode($this->request->domain()));r
if(substr($str,0,2)=='QB'){ //文件核对,防止网络故障,抓取一些出错信息r
$str = substr($str,2);r
}else{r
$str='';r
}r
return $str;r
}r
r
r
protected function getfile($page=0){r
if (!$page) {r
$str = http_curl('https://x1.php168.com/appstore/upgrade/get_list_file.html?typeid='.$this->webdb['typeid'].'&appkey='.urlencode($this->webdb['mymd5']).'&domain='.urlencode($this->request->domain()),['app_edition'=>fun('upgrade@local_edition')]);r
file_put_contents(RUNTIME_PATH.'updatelist.txt', $str);r
}else{r
$str = file_get_contents(RUNTIME_PATH.'updatelist.txt');r
} r
return $str ? json_decode($str,true) : '';r
}r
r
}r
?>


> 复制下面的代码替换`templateadmin_styledefaultadminupgradeindex.htm`中的内容


{extend name="index:layout" /}r
r
{block name="menu{/block}r
r
{block name="content\r
r
r
r
r
r
.locktr td,.locktr td a{r
color:orange;r
}r
.progress_warp{r
position:fixed;r
top:65%; r
z-index:9999999999;r
width:100%;r
display:none;r
}r
.progress_warp .layui-progress{r
margin:0 200px;r
}r
r
r
r
在线升级>>
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
选中升级 文件名称 升级前时间 更新时间 对比差异
r
正在获取云端数据信息,请稍候...r
r
r
{{rs.i}}r
{{rs.showfile}} r
{{rs.ctime}}r
{{rs.time}} 对比差异r
r
r
r
r
r
r
r
升级说明
r
r
r
r
r
r
r
r
r
r
r
r
r
r
r
{/block}r

,
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/214456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号