209 lines
4.7 KiB
PHP
209 lines
4.7 KiB
PHP
<?php
|
|
defined('IN_TS') or die('Access Denied.');
|
|
function file_list($path){
|
|
if ($handle = opendir($path)){
|
|
while (false !== ($file = readdir($handle))){
|
|
if ($file != "." && $file != ".."){
|
|
if (is_dir($path."/".$file)){
|
|
file_list($path."/".$file);
|
|
}else{
|
|
$upfile = $path."/".$file;
|
|
$nfile = substr($path.'/'.$file,13);
|
|
$npath = substr($path,13);
|
|
|
|
if(abcefile($npath)==='1'){
|
|
#return $npath;
|
|
getJson($npath.'目录没有可写权限,linux请给755权限',1,0);
|
|
}
|
|
|
|
if(is_file($nfile)){
|
|
|
|
if(copy($upfile,$nfile)===false){
|
|
getJson('升级文件覆盖失败',1,0);
|
|
}
|
|
|
|
}else{
|
|
if(copy($upfile,$nfile)===false){
|
|
getJson('升级文件覆盖失败',1,0);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
function abcefile($path){
|
|
if ($handle = opendir($path)){
|
|
while (false !== ($file = readdir($handle))){
|
|
if ($file != "." && $file != ".."){
|
|
if (is_dir($path."/".$file)){
|
|
abcefile($path."/".$file);
|
|
}else{
|
|
$upfile = $path."/".$file;
|
|
//如果文件存在
|
|
if(is_file($upfile)){
|
|
//检测文件是否可写
|
|
if(is_writable($upfile)==false){
|
|
return '1';exit;//不可写就停止并返回1
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
switch($ts){
|
|
|
|
case "":
|
|
include template('update');
|
|
break;
|
|
|
|
case "iswritable":
|
|
|
|
$msg = '';
|
|
|
|
#检测php必要函数
|
|
if(function_exists('opendir')==false) $msg .= 'opendir函数不可用<br />';#opendir
|
|
if(function_exists('readdir')==false) $msg .= 'readdir函数不可用<br />';#readdir
|
|
if(function_exists('copy')==false) $msg .= 'copy函数不可用<br />';#copy
|
|
|
|
#检查php必要扩展
|
|
if(extension_loaded('Fileinfo')==false) $msg .= 'Fileinfo扩展不可用<br />';#Fileinfo
|
|
|
|
#检测upgrade目录是否可写
|
|
if(abcefile('upgrade')) $msg .= 'upgrade目录不可写<br />';
|
|
|
|
|
|
echo $msg;
|
|
|
|
|
|
break;
|
|
|
|
//手动升级检测
|
|
case "hand":
|
|
|
|
$upid = tsIntval($_GET['upid']);
|
|
|
|
include template('update_hand');
|
|
break;
|
|
|
|
|
|
//第一步检测可写权限
|
|
case "one":
|
|
|
|
include template('update_one');
|
|
break;
|
|
|
|
//第二步,升级数据库
|
|
case "two":
|
|
|
|
include template('update_two');
|
|
break;
|
|
|
|
case "twodo":
|
|
|
|
$upsql = tsTrim($_POST['upsql']);
|
|
|
|
if($upsql){
|
|
|
|
$arrSql = explode('--------------------',$upsql);
|
|
foreach($arrSql as $item){
|
|
$item = tsTrim($item);
|
|
if ($item){
|
|
$db->query($item);
|
|
}
|
|
}
|
|
|
|
//执行成功
|
|
echo '1';exit;
|
|
|
|
}else{
|
|
|
|
//无SQL可执行
|
|
echo '0';exit;
|
|
|
|
}
|
|
|
|
//echo '1';exit;
|
|
|
|
break;
|
|
|
|
//第三部,升级系统文件
|
|
case "three":
|
|
|
|
include template('update_three');
|
|
break;
|
|
|
|
case "threedo":
|
|
|
|
$upversion = tsTrim($_GET['upversion']);
|
|
|
|
if($upversion==''){
|
|
getJson('版本号有问题',1,0);
|
|
}
|
|
|
|
$filezip = $upversion.'.zip';
|
|
|
|
//先删除旧的zip升级文件
|
|
unlink('upgrade/'.$filezip);
|
|
delDir('upgrade/'.$upversion);
|
|
|
|
//拼接出要下载的远程文件
|
|
$upfile = 'https://www.thinksaas.cn/upgrade/'.$filezip;
|
|
|
|
//第一步:多线程下载zip压缩文件
|
|
$urls=array(
|
|
$upfile,
|
|
$upfile,
|
|
$upfile,
|
|
);
|
|
$save_to='upgrade/';
|
|
|
|
$mh=curl_multi_init();
|
|
foreach($urls as $i=>$url){
|
|
//$g=$save_to.basename($url);
|
|
$g = $save_to.$filezip;
|
|
if(!is_file($g)){
|
|
$conn[$i]=curl_init($url);
|
|
$fp[$i]=fopen($g,"w");
|
|
curl_setopt($conn[$i],CURLOPT_USERAGENT,"Mozilla/4.0(compatible; MSIE 7.0; Windows NT 6.0)");
|
|
curl_setopt($conn[$i],CURLOPT_FILE,$fp[$i]);
|
|
curl_setopt($conn[$i],CURLOPT_HEADER ,0);
|
|
curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,60);
|
|
curl_multi_add_handle($mh,$conn[$i]);
|
|
}
|
|
}
|
|
do{
|
|
$n=curl_multi_exec($mh,$active);
|
|
}while($active);
|
|
foreach($urls as $i=>$url){
|
|
curl_multi_remove_handle($mh,$conn[$i]);
|
|
curl_close($conn[$i]);
|
|
fclose($fp[$i]);
|
|
}
|
|
curl_multi_close($mh);
|
|
|
|
chmod('upgrade/'.$filezip,0755);
|
|
|
|
//第二步:下载完之后开始解压覆盖原有文件
|
|
include 'thinksaas/pclzip.lib.php';
|
|
$archive = new PclZip('upgrade/'.$filezip);
|
|
if ($archive->extract(PCLZIP_OPT_PATH, 'upgrade/'.$upversion,PCLZIP_OPT_REPLACE_NEWER) == 0) {
|
|
getJson('升级包解压失败',1,0);
|
|
|
|
}else{
|
|
unlink('upgrade/'.$filezip);
|
|
}
|
|
|
|
//直接循环覆盖吧
|
|
file_list('upgrade/'.$upversion);
|
|
|
|
//删除目录
|
|
delDir('upgrade/'.$upversion);
|
|
|
|
getJson('升级成功',1,1);
|
|
break;
|
|
} |