/** * 在线升级 */ public function init() { // 开始升级 $do = I('get.do'); $cover = I('cover', 0); if (empty($do)) { $this->message(L('upgradeing'), url('init', array('do' => 1, 'cover' => $cover))); } // 获取补丁列表 $pathlist = $this->pathlist(); if (empty($pathlist)) { $this->message(L('upgrade_success'), url('checkfile')); } // 创建缓存文件夹 if (!file_exists(CACHE_PATH . 'upgrade')) { @mkdir(CACHE_PATH . 'upgrade'); } foreach ($pathlist as $k => $v) { $release = str_replace('patch_R', '', basename($v, ".zip")); // 远程压缩包地址 $upgradezip_url = $this->upgrade_path_base . $v; // 保存到本地地址 $upgradezip_path = CACHE_PATH . 'upgrade' . DIRECTORY_SEPARATOR . $v; // 解压路径 $upgradezip_source_path = CACHE_PATH . 'upgrade' . DIRECTORY_SEPARATOR . basename($v, ".zip"); // 下载压缩包 @file_put_contents($upgradezip_path, Http::doGet($upgradezip_url)); // 解压缩 $zip = new Zip(); if ($zip->decompress($upgradezip_path, $upgradezip_source_path) == 0) { die("Error : unpack the failure."); } // 拷贝utf8/upload文件夹到根目录 $copy_from = $upgradezip_source_path . DIRECTORY_SEPARATOR . $this->patch_charset . DIRECTORY_SEPARATOR . 'upload' . DIRECTORY_SEPARATOR; $copy_to = ROOT_PATH; $this->copyfailnum = 0; $this->copydir($copy_from, $copy_to, $cover); // 检查文件操作权限,是否复制成功 if ($this->copyfailnum > 0) { // 如果失败,终止操作 $this->message(L('please_check_filepri'), url('index')); } // 执行sql // sql目录地址 $sql_path = CACHE_PATH . 'upgrade' . DIRECTORY_SEPARATOR . basename($v, ".zip") . DIRECTORY_SEPARATOR . $this->patch_charset . DIRECTORY_SEPARATOR . 'upgrade' . DIRECTORY_SEPARATOR; $file_list = glob($sql_path . '*'); if (!empty($file_list)) { foreach ($file_list as $fk => $fv) { $file_path = strtolower($fv); if (in_array(substr($file_path, -3, 3), array('php', 'sql')) && substr($file_path, -10, 10) != 'config.php') { if (substr($file_path, -3, 3) == 'sql') { // 更新sql文件 $sqlData = Install::mysql($file_path, 'ecs_', C('DB_PREFIX')); // 执行sql文件 $model = new EcModel(); if (is_array($sqlData)) { foreach ($sqlData as $sql) { @$model->db->query($sql); } } } elseif (strtolower(substr($file_list[$fk], -3, 3)) == 'php' && file_exists($file_path)) { include $file_path; } } } } // 读取版本号写入version.php文件 // 配置文件地址 $configpath = CACHE_PATH . 'upgrade' . DIRECTORY_SEPARATOR . basename($v, ".zip") . DIRECTORY_SEPARATOR . $this->patch_charset . DIRECTORY_SEPARATOR . 'upgrade' . DIRECTORY_SEPARATOR . 'version.php'; if (file_exists($configpath)) { $config = (include $configpath); // 版本文件地址 $content = "<?php\ndefine('APPNAME', '" . $config['APPNAME'] . "');\ndefine('VERSION', '" . $config['VERSION'] . "');\ndefine('RELEASE', '" . $release . "');\ndefine('ECTOUCH_AUTH_KEY', '" . ECTOUCH_AUTH_KEY . "');"; @file_put_contents(ROOT_PATH . 'data/version.php', $content); } // 删除文件 @unlink($upgradezip_path); // 删除文件夹 del_dir($upgradezip_source_path); // 提示语 $tmp_k = $k + 1; if (!empty($pathlist[$tmp_k])) { $next_update = '<br />' . L('upgradeing') . basename($pathlist[$tmp_k], ".zip"); } else { $next_update; } // 是否升级成功 $this->message(basename($v, ".zip") . L('upgrade_success') . $next_update, url('init', array('do' => 1, 'cover' => $cover))); } }