mirror of https://gitee.com/zorlan/skycaiji
155 lines
4.8 KiB
PHP
155 lines
4.8 KiB
PHP
<?php
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| SkyCaiji (蓝天采集器)
|
|
|--------------------------------------------------------------------------
|
|
| Copyright (c) 2018 https://www.skycaiji.com All rights reserved.
|
|
|--------------------------------------------------------------------------
|
|
| 使用协议 https://www.skycaiji.com/licenses
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
namespace skycaiji\admin\controller;
|
|
|
|
class Upgrade extends BaseController{
|
|
public $oldFilePath='';
|
|
public $newFilePath='';
|
|
public function __construct(){
|
|
parent::__construct();
|
|
set_time_limit(3600);
|
|
$this->oldFilePath=config('root_path').'/data/program/backup/skycaiji'.$GLOBALS['config']['version'];
|
|
$this->newFilePath=config('root_path').'/data/program/upgrade/skycaiji'.$GLOBALS['config']['version'];
|
|
}
|
|
/*检测更新*/
|
|
public function newVersionAction(){
|
|
$version=get_html('https://www.skycaiji.com/upgrade/program/version?v='.SKYCAIJI_VERSION,null,null,'utf-8');
|
|
$version=json_decode($version,true);
|
|
$new_version=trim($version['new_version']);
|
|
$cur_version=$GLOBALS['config']['version'];
|
|
|
|
if(version_compare($new_version,$cur_version)>=1){
|
|
$this->success('',null,$version);
|
|
}else{
|
|
$this->error();
|
|
}
|
|
}
|
|
/*
|
|
* 下载的文件完整性检测
|
|
* 注意:执行该方法时,旧代码已经编译了,替换文件后还是执行的旧文件代码
|
|
* 还要注意thinkphp缓存的问题
|
|
* */
|
|
public function downCompleteAction(){
|
|
$downFileList=$this->_getNewFiles();
|
|
$errorFiles=array();
|
|
|
|
foreach ($downFileList as $file){
|
|
$filename=$this->newFilePath.$file['file'];
|
|
if(!file_exists($filename)){
|
|
|
|
$errorFiles[]=$file['file'];
|
|
}else{
|
|
|
|
$filemd5=md5_file($filename);
|
|
if($filemd5!=$file['md5']){
|
|
$errorFiles[]=$file['file'];
|
|
}
|
|
}
|
|
}
|
|
if(!empty($errorFiles)){
|
|
|
|
$errorFiles=array_unique($errorFiles);
|
|
$this->error('',null,$errorFiles);
|
|
}else{
|
|
|
|
foreach ($downFileList as $file){
|
|
$content=file_get_contents($this->newFilePath.$file['file']);
|
|
write_dir_file(config('root_path').$file['file'],$content);
|
|
}
|
|
|
|
$upgradeDb=new \skycaiji\install\event\UpgradeDb();
|
|
$upgradeResult=$upgradeDb->run();
|
|
if($upgradeResult['success']){
|
|
$this->success();
|
|
}else{
|
|
$this->error();
|
|
}
|
|
}
|
|
}
|
|
|
|
/*下载文件*/
|
|
public function downFileAction(){
|
|
$fileName=input('filename');
|
|
$filemd5=input('filemd5');
|
|
|
|
if(file_exists($this->newFilePath.$fileName)){
|
|
|
|
if($filemd5==md5_file($this->newFilePath.$fileName)){
|
|
|
|
$this->success();
|
|
}
|
|
}
|
|
$fileUrl='https://www.skycaiji.com/upgrade/program/getFile?filename='.rawurlencode(base64_encode($fileName));
|
|
$result=\Requests::get($fileUrl,array(),array('timeout'=>100,'verify'=>false));
|
|
if(200==$result->status_code){
|
|
|
|
$newFile=$result->body;
|
|
$oldFile=file_get_contents(config('root_path').$fileName);
|
|
if(!empty($oldFile)){
|
|
|
|
write_dir_file($this->oldFilePath.$fileName,$oldFile);
|
|
}
|
|
write_dir_file($this->newFilePath.$fileName,$newFile);
|
|
$newFilemd5=md5_file($this->newFilePath.$fileName);
|
|
if($newFilemd5==$filemd5){
|
|
|
|
$this->success();
|
|
}else{
|
|
$this->error('文件校验失败:'.$fileName);
|
|
}
|
|
}else{
|
|
$this->error('文件下载失败:'.$fileName);
|
|
}
|
|
$this->error();
|
|
}
|
|
/*获取升级、更新的文件*/
|
|
public function newFilesAction(){
|
|
$downFileList=$this->_getNewFiles();
|
|
if(empty($downFileList)){
|
|
$this->error();
|
|
}else{
|
|
$this->success('',null,array('files'=>$downFileList));
|
|
}
|
|
}
|
|
|
|
public function _getNewFiles(){
|
|
$md5Files=array();
|
|
program_filemd5_list(config('root_path'),$md5Files);
|
|
|
|
$md5FileList=array();
|
|
foreach ($md5Files as $k=>$v){
|
|
|
|
$md5FileList[md5($v['file'])]=$v;
|
|
}
|
|
unset($md5Files);
|
|
|
|
|
|
$newFileList=get_html('https://www.skycaiji.com/upgrade/program/files',null,array('timeout'=>100),'utf-8');
|
|
$newFileList=json_decode($newFileList,true);
|
|
|
|
$downFileList=array();
|
|
|
|
foreach ($newFileList as $newFile){
|
|
$filenameMd5=md5($newFile['file']);
|
|
if(isset($md5FileList[$filenameMd5])){
|
|
if($md5FileList[$filenameMd5]['md5']!=$newFile['md5']||$md5FileList[$filenameMd5]['file']!=$newFile['file']){
|
|
|
|
$downFileList[]=$newFile;
|
|
}
|
|
}else{
|
|
|
|
$downFileList[]=$newFile;
|
|
}
|
|
}
|
|
return empty($downFileList)?null:$downFileList;
|
|
}
|
|
} |