企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### **全新示例** ~~~ public function index() { //更新包检测地址 $version = $this->version; try { $request = \think\Request::instance(); $result = Http::get('你的域名'.'/api/index/index', ["version"=>$version,'domain'=>$request->root(true)]); } catch (\Exception $e) { return json(["msg" => "更新包获取失败,请重试!", "code" => 400]); } $result = json_decode($result, true); if(empty($result)){ return json(["msg" => "更新包获取失败,请重试!", "code" => 400]); } if($result["code"] == 1 && $this->gengxin = true){ //循环更新完毕 //更新完成后刷新配置文件 $this->refreshFile(); //清除站点缓存 rmdirs(CACHE_PATH, false); Cache::clear(); return json(["msg" => "更新完成!请刷新页面", "code" => 200]); } //code为400的时候代表没有更新包 if ($result["code"] == 400) { //没有需要更新的版本 return json(["msg" => $result["msg"], "code" => 400]); } $this->gengxin = true; //开始更新版本 //更新包信息 $upgrade = $result["data"]; $file_url = $upgrade["file"]; $filename = basename($file_url); $dir = ROOT_PATH . "runtime/upgrade/"; if (!file_exists($dir)) { mkdir($dir, 0777, true); } $path = file_exists($dir . $filename) ? $dir . $filename : $this->download_file($file_url, $dir, $filename); $zip = new \ZipArchive(); //打开压缩包 if ($zip->open($path) === true) { $toPath = ROOT_PATH; try { //解压文件到toPath路径下,用于覆盖差异文件 $zip->extractTo($toPath); unlink($path); //删除更新包 } catch (\Exception $e) { return json(["msg" => "没有该目录[" . $toPath . "]的写入权限", "code" => 400]); } //文件差异覆盖完成,开始更新数据库 if(file_exists(ROOT_PATH . "/sql.php")){ include ROOT_PATH . "/sql.php"; chmod(ROOT_PATH . "/sql.php",0777); unlink(ROOT_PATH . "/sql.php"); } //更新后台静态文件版本 db::name('config')->where(['name' => 'version'])->update(['value' => time()]); $this->version = $upgrade["version"]; //更新本次版本号准备检测下个版本 return $this->index(); //递归更新 } else { unlink($path); //删除更新包 return json(["msg" => "更新包解压失败,请重试!", "code" => 400]); } } /** * 刷新配置文件 */ protected function refreshFile(){ $config = []; $list = db::name('config')->select(); foreach ($list as $k => $v) { $value = $v; if (in_array($value['type'], ['selects', 'checkbox', 'images', 'files'])) { $value['value'] = explode(',', $value['value']); } if ($value['type'] == 'array') { $value['value'] = (array)json_decode($value['value'], true); } $config[$value['name']] = $value['value']; } file_put_contents( CONF_PATH . 'extra' . DS . 'site.php', '<?php' . "\n\nreturn " . var_export_short($config) . ";\n" ); } public function download_file($url, $dir, $filename = '') { if (empty($url)) { return false; } $ext = strrchr($url, '.'); $dir = realpath($dir); //目录+文件 $filename = (empty($filename) ? '/' . time() . '' . $ext : '/' . $filename); $filename = $dir . $filename; //开始捕捉 ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); $fp2 = fopen($filename, "a"); fwrite($fp2, $img); fclose($fp2); return $filename; } ~~~ ### **原生示例** ~~~ /*添加到需要授权php源码顶部----复制添加时请把 ?换成 ? */ 请添加在<?php ?> 里面 class UpdateAction extends BackAction{ public function index(){ $version = './Data/version.php'; $ver = include($version); $ver = $ver['ver']; $sysnum = include($version); $sysnum = $sysnum['sysnum']; $ver = substr($ver,-3); $updatehost = 'http://<? echo $_SERVER['SERVER_NAME']; ?>/oreo_look.php'; $lastver = file_get_contents(($updatehost . '?a=check&v=') . $ver .'&sysnum='. $sysnum); if($lastver !== $ver){ $updateinfo = ('<p class="red">最新版本为:源分享系统v ' . $lastver) . '</p><span> <a href="javascript:if(confirm(\'升级前,请确认已经做好数据库和程序备份!\'))location=\'./index.php?g=System&m=Update&a=updatenow\'">点击这里在线升级</a> </span>'; $chanageinfo = file_get_contents(($updatehost . '?a=chanage&v=') . $lastver .'&sysnum='. $sysnum); }else{ $updateinfo = ('<p class="red">最新版本为:源分享系统v ' . $lastver) . '</p><span>已经是最新系统 不需要升级</span>'; } $this -> assign('updateinfo', $updateinfo); $this -> assign('chanageinfo', $chanageinfo); $this -> display(); } public function updatenow(){ include('Update.class.php'); $version = './Data/version.php'; $ver = include($version); $ver = $ver['ver']; $sysnum = include($version); $sysnum = $sysnum['sysnum']; $ver = substr($ver,-3); $hosturl = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); $updatehost = 'http://<? echo $_SERVER['SERVER_NAME']; ?>/oreo_look.php'; $updatehosturl = $updatehost . '?a=update&v=' . $ver . '&u=' . $hosturl .'&key='. $updatekey .'&sysnum='. $sysnum ; $updatenowinfo = file_get_contents($updatehosturl); if (strstr($updatenowinfo, 'zip')){ $pathurl = $updatehost . '?a=down&f=' . $updatenowinfo .'&sysnum='. $sysnum; $updatedir = './Data/logs/Temp/update'; delDirAndFile($updatedir); get_file($pathurl, $updatenowinfo, $updatedir); $updatezip = $updatedir . '/' . $updatenowinfo; $archive = new PclZip($updatezip); if ($archive -> extract(PCLZIP_OPT_PATH, './', PCLZIP_OPT_REPLACE_NEWER) == 0){ $updatenowinfo = "远程升级文件不存在.升级失败</font>"; }else{ $sqlfile = $updatedir . '/update.sql'; $sql = file_get_contents($sqlfile); if($sql){ $sql = str_replace("wy_", C('DB_PREFIX'), $sql); $Model = new Model(); error_reporting(0); foreach(split(";[\r\n]+", $sql) as $v){ @mysql_query($v); } } $updatenowinfo = "<font color=red>升级完成 {$sqlinfo}</font><span><a href=./index.php?g=System&m=Update>点击这里 查看是否还有升级包</a></span>"; } } //delDirAndFile($updatedir); $this -> assign('updatenowinfo', $updatenowinfo); $this -> display(); } } ~~~