//实例化模型类 $sql = "CREATE DATABASE IF NOT EXISTS `" . $config['DB_NAME'] . "` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"; $model->query($sql); //如果指定数据库不存在,则尝试创建 $model->db->select_db($config['DB_NAME']); //选择数据库 $ins = new Install(); //实例化数据库安装类 $DB_PREFIX = in($_POST['DB_PREFIX']); if (empty($DB_PREFIX)) { $DB_PREFIX = 'dc_'; } if ($_POST['test']) { $sql_array = Install::mysql('../data/test.sql', 'dc_', $DB_PREFIX); } else { $sql_array = Install::mysql('../data/db.sql', 'dc_', $DB_PREFIX); } //执行数据库操作 foreach ($sql_array as $sql) { $model->db->query($sql); //安装数据 } //修改配置文件 $config_array = array(); foreach ($config as $key => $value) { $config_array["config['" . $key . "']"] = $value; } if (!set_config($config_array)) { cpError::show('配置文件写入失败!'); } //安装成功,创建锁定文件
public function install() { $tmp_a = str_replace('/install', '', __ROOT__); $tmp_b = strrpos($tmp_a, '/'); $db_config = array('DB_HOST' => $this->config['DB_HOST'], 'DB_PORT' => $this->config['DB_PORT'], 'DB_NAME' => $this->config['DB_NAME'], 'DB_USER' => $this->config['DB_USER'], 'DB_PWD' => $this->config['DB_PWD'], 'DB_PREFIX' => $this->config['DB_PREFIX'], 'site_url' => 'http://' . $_SERVER['HTTP_HOST'] . substr($tmp_a, 0, $tmp_b + 1)); if (!$this->create_db($db_config)) { $this->assign('error', '数据库创建失败,请检测本帐号是否有权限!'); $this->display('error'); exit; } $DB_PREFIX = $db_config['DB_PREFIX']; if (empty($DB_PREFIX)) { $DB_PREFIX = 'ecs_'; } //处理安装SQL的字段兼容 if (!$this->get_column($db_config, $DB_PREFIX . 'users', 'aite_id')) { $growing = "ALTER TABLE `ecs_users` ADD COLUMN `aite_id` VARCHAR(40) NOT NULL COMMENT '第三方登陆标识';"; $this->update_install_sql($growing); } if (!$this->get_column($db_config, $DB_PREFIX . 'goods', 'sales_count')) { $growing = "ALTER TABLE `ecs_goods` ADD COLUMN `sales_count` int(10) UNSIGNED NOT NULL DEFAULT 0 AFTER `click_count`;"; $this->update_install_sql($growing); } if (!$this->get_column($db_config, $DB_PREFIX . 'brand', 'brand_banner')) { $growing = "ALTER TABLE `ecs_brand` ADD COLUMN `brand_banner` VARCHAR(80) NOT NULL COMMENT '商品品牌banner';"; $this->update_install_sql($growing); } if (!$this->get_column($db_config, $DB_PREFIX . 'category', 'cat_ico')) { $growing = "ALTER TABLE `ecs_category` ADD COLUMN `cat_ico` varchar(255) NOT NULL;"; $this->update_install_sql($growing); } if (!$this->get_column($db_config, $DB_PREFIX . 'users', 'wxch_bd')) { $growing = "ALTER TABLE `ecs_users` ADD COLUMN `wxch_bd` CHAR(2) NOT NULL AFTER `passwd_answer`;"; $this->update_install_sql($growing); } if (!$this->get_column($db_config, $DB_PREFIX . 'users', 'wxid')) { $growing = "ALTER TABLE `ecs_users` ADD COLUMN `wxid` CHAR(28) NOT NULL AFTER `passwd_answer`;"; $this->update_install_sql($growing); } $sql_data = Install::mysql(ROOT_PATH . 'install/install.sql', 'ecs_', $DB_PREFIX); if (!$this->run_sql($db_config, $sql_data)) { $this->assign('error', '基础数据导入失败,请检查后手动删除数据库重新安装!'); $this->display('error'); } if ($this->save_config($db_config)) { @fopen($this->lockFile, 'w'); $this->display('success'); } else { $this->assign('error', '配置文件写入失败,请检测config.php是否有写入权限!'); $this->display('error'); } }
/** * 安装处理 */ public function importing() { $data = in($_POST); $configDb = $data['DB']; if (strpos($configDb['DB_HOST'], ':') !== false) { $db_host = explode(':', $configDb['DB_HOST']); $configDb['DB_HOST'] = $db_host[0]; $configDb['DB_PORT'] = $db_host[1]; } else { $configDb['DB_PORT'] = '3306'; } $link = @mysql_connect($configDb['DB_HOST'] . ':' . $configDb['DB_PORT'], $configDb['DB_USER'], $configDb['DB_PWD']); if (!$link) { $this->msg('数据库连接失败,请检查连接信息是否正确!', false); } $mysqlInfo = @mysql_get_server_info($link); if ($mysqlInfo < '5.0') { $this->msg('MySql版本低于5.0,无法继续安装!', false); } $status = @mysql_select_db($configDb['DB_NAME'], $link); if (!$status) { $this->msg('数据库' . $configDb['DB_NAME'] . '不存在,请检查数据库!', false); } if ($data['agree'] != 1) { $this->msg('请认真阅读并同意安装协议!', false); } //设置表前缀 $dbPrefix = $configDb['DB_PREFIX']; if (empty($dbPrefix)) { $dbPrefix = 'ecs_'; } $dbData = ROOT_PATH . 'data/install.sql'; $sqlData = Install::mysql($dbData, 'ecs_', $dbPrefix); //更新安装sql文件 if (!model('Install')->get_column($configDb, $dbPrefix . 'order_info', 'mobile_pay')) { $sqlData[] = "ALTER TABLE `" . $dbPrefix . "order_info` ADD COLUMN `mobile_order` int(1) UNSIGNED NOT NULL DEFAULT 0,ADD COLUMN `mobile_pay` int(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `discount`;"; } $sqlData[] = "UPDATE `" . $dbPrefix . "touch_shop_config` SET `value` = '" . str_replace('/mobile', '', __URL__) . "' where `code`='shop_url';"; if (!model('Install')->runSql($configDb, $sqlData)) { $this->msg('数据导入失败,请检查后手动删除数据库重新安装!', false); } model('Install')->filter_column($configDb, 'touch_shop_config'); //配置shop_config $this->set_config($configDb); $this->msg('安装成功!', true); }
/** * 在线升级 */ 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))); } }