Files
2023-06-22 13:33:25 +08:00

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;
}