コード例 #1
0
ファイル: File.class.php プロジェクト: jackycgq/GreenCMS
 /**
  * 功能:生成zip压缩文件,存放都 WEB_CACHE_PATH 中
  *
  * @param $files        array   需要压缩的文件
  * @param $filename     string  压缩后的zip文件名  包括zip后缀
  * @param $path         string  文件所在目录
  * @param $outDir       string  输出目录
  *
  * @return array
  */
 public static function zip($files, $filename, $outDir = WEB_CACHE_PATH, $path = DB_Backup_PATH)
 {
     $zip = new \ZipArchive();
     File::makeDir($outDir);
     $res = $zip->open($outDir . "\\" . $filename, \ZipArchive::CREATE);
     if ($res == true) {
         foreach ($files as $file) {
             if (empty($file)) {
                 continue;
             }
             if ($t = $zip->addFile($path . $file, str_replace('/', '', $file))) {
                 $t = $zip->addFile($path . $file, str_replace('/', '', $file));
             }
         }
         $zip->close();
         return true;
     } else {
         return false;
     }
 }
コード例 #2
0
 /**
  * 备份数据库
  * @param string $type
  * @param array $tables
  * @param string $path
  * @return array
  */
 public function backupDB($type = "系统自动备份", $tables = array(), $path = DB_Backup_PATH)
 {
     $M = M();
     function_exists('set_time_limit') && set_time_limit(0);
     //防止备份数据过程超时
     /**
      * 如果备份文件夹不存在,则自动建立
      */
     if (!is_dir(DB_Backup_PATH)) {
         File::makeDir(DB_Backup_PATH, 0777);
     }
     G('Backup_start');
     $pre = "# -----------------------------------------------------------\n" . "# " . get_opinion('title') . " database backup files\n" . "# URL: " . get_opinion('site_url') . "\n" . "# Type: {$type}\n";
     $MySQLLogic = new \Common\Util\MySQLUtil();
     $bdTable = $MySQLLogic->backupTable($tables);
     //取得表结构信息
     $outPut = "";
     $file_n = 1;
     $backedTable = array();
     foreach ($tables as $table) {
         $backedTable[] = $table;
         $outPut .= "\n\n# 数据库表:{$table} 数据信息\n";
         $tableInfo = $M->query("SHOW TABLE STATUS LIKE '{$table}'");
         $page = ceil($tableInfo[0]['Rows'] / 10000) - 1;
         for ($i = 0; $i <= $page; $i++) {
             $query = $M->query("SELECT * FROM {$table} LIMIT " . $i * 10000 . ", 10000");
             foreach ($query as $val) {
                 $temSql = "";
                 $tn = 0;
                 $temSql = '';
                 foreach ($val as $v) {
                     $temSql .= $tn == 0 ? "" : ",";
                     $temSql .= $v == '' ? "''" : "'{$v}'";
                     $tn++;
                 }
                 $temSql = "INSERT INTO `{$table}` VALUES ({$temSql});\n";
                 $sqlNo = "\n# Time: " . date("Y-m-d H:i:s") . "\n" . "# -----------------------------------------------------------\n" . "# 当前SQL卷标:#{$file_n}\n# -----------------------------------------------------------\n\n\n";
                 if ($file_n == 1) {
                     $sqlNo = "# Description:当前SQL文件包含了表:" . implode("、", $tables) . "的结构信息,表:" . implode("、", $backedTable) . "的数据" . $sqlNo;
                 } else {
                     $sqlNo = "# Description:当前SQL文件包含了表:" . implode("、", $backedTable) . "的数据" . $sqlNo;
                 }
                 if (strlen($pre) + strlen($sqlNo) + strlen($bdTable) + strlen($outPut) + strlen($temSql) > get_opinion("sqlFileSize")) {
                     $file_name = $path . "_" . $file_n . ".sql";
                     $outPut = $file_n == 1 ? $pre . $sqlNo . $bdTable . $outPut : $pre . $sqlNo . $outPut;
                     //file_put_contents($file, $outPut, FILE_APPEND);
                     //TODO file_put_contents-->> File::writeFile需要测试
                     File::writeFile($file_name, $outPut);
                     $bdTable = $outPut = "";
                     $backedTable = array();
                     $backedTable[] = $table;
                     $file_n++;
                 }
                 $outPut .= $temSql;
             }
         }
     }
     if (strlen($bdTable . $outPut) > 0) {
         $sqlNo = "\n# Time: " . date("Y-m-d H:i:s") . "\n" . "# -----------------------------------------------------------\n" . "# 当前SQL卷标:#{$file_n}\n# -----------------------------------------------------------\n\n\n";
         if ($file_n == 1) {
             $sqlNo = "# Description:当前SQL文件包含了表:" . implode("、", $tables) . "的结构信息,表:" . implode("、", $backedTable) . "的数据" . $sqlNo;
         } else {
             $sqlNo = "# Description:当前SQL文件包含了表:" . implode("、", $backedTable) . "的数据" . $sqlNo;
         }
         $file_name = $path . "_" . $file_n . ".sql";
         $outPut = $file_n == 1 ? $pre . $sqlNo . $bdTable . $outPut : $pre . $sqlNo . $outPut;
         // file_put_contents($file_name, $outPut, FILE_APPEND);
         File::writeFile($file_name, $outPut);
         $file_n++;
     }
     G('Backup_end');
     $res = array("status" => 1, "info" => "成功备份所选数据库表结构和数据,本次备份共生成了" . ($file_n - 1) . "个SQL文件。耗时:" . G('Backup_start', 'Backup_end') . "秒", "url" => U('Admin/Data/restore'));
     return $res;
 }
コード例 #3
0
 /**
  *
  */
 public function step4()
 {
     $time = date("Y-m-d H:m:s");
     $db_host = $_POST["db_host"];
     $db_port = $_POST["db_port"];
     $db_user = $_POST["db_user"];
     $db_password = $_POST["db_password"];
     $db_name = $_POST["db_name"];
     $db_prefix = $_POST["db_prefix"];
     if ($_POST['admin_password'] != $_POST['admin_password2'] || trim($_POST['admin_password']) == '' || trim($_POST['admin_password2']) == '') {
         $this->error("两次输入的密码不一致,请重新设定!,或者密码为空");
     } else {
         $admin_user = $_POST['admin_user'];
         $admin_password = encrypt($_POST['admin_password']);
         $admin_email = $_POST['admin_email'];
         $user_session = encrypt($admin_user . $admin_password . time());
     }
     $title = $_POST['cfg_title'];
     $site_url = $_POST['cfg_basehost'] . $_POST['cfg_cmspath'];
     if (!test_db_connect($db_host . ":" . $db_port, $db_user, $db_password)) {
         $this->error("数据库服务器或登录密码无效,\n\n无法连接数据库,请重新设定!");
     }
     $conn = mysql_connect($db_host . ":" . $db_port, $db_user, $db_password);
     mysql_query("CREATE DATABASE IF NOT EXISTS `" . $db_name . "`;", $conn);
     if (!mysql_select_db($db_name)) {
         $this->error("选择数据库失败,可能是你没权限,请预先创建一个数据库!");
     }
     mysql_query("set character set 'utf8'");
     mysql_query("set names 'utf8'");
     $file = WEB_ROOT . 'Data/Install/db_config_sample.php';
     if (!File::file_exists($file)) {
         $this->error('Data/Install/db_config_sample.php文件不存在,请检查');
     }
     $content = File::readFile($file);
     $content = str_replace("~dbhost~", $db_host, $content);
     $content = str_replace("~dbport~", $db_port, $content);
     $content = str_replace("~dbname~", $db_name, $content);
     $content = str_replace("~dbuser~", $db_user, $content);
     $content = str_replace("~dbpwd~", $db_password, $content);
     $content = str_replace("~dbprefix~", $db_prefix, $content);
     if (!File::writeFile(WEB_ROOT . 'db_config.php', $content, 'w+')) {
         $this->error("数据库配置文件写入失败,请您手动根据Data/Install/db_config_sample.php文件在根目录创建文件");
     }
     File::makeDir(WEB_ROOT . 'Data/Cache');
     $sql_empty = File::readFile(WEB_ROOT . 'Data/Install/greencms_empty.sql');
     $sql_query = str_replace('{$db_prefix}', $db_prefix, $sql_empty);
     $file = WEB_ROOT . 'Data/Cache/greencms_sample.sql';
     File::writeFile($file, $sql_query, 'w+');
     insertDB($file, $conn);
     File::delFile($file);
     $sql_empty = File::readFile(WEB_ROOT . 'Data/Install/greencms_init.sql');
     $sql_query = str_replace('{$db_prefix}', $db_prefix, $sql_empty);
     $file2 = WEB_ROOT . 'Data/Cache/greencms_init_sample.sql';
     File::writeFile($file2, $sql_query, 'w+');
     insertDB($file2, $conn);
     File::delFile($file2);
     /**
      * 插入管理员数据&更新配置
      */
     $admin_query = "INSERT INTO `{$db_prefix}user` (`user_id`, `user_login`, `user_pass`, `user_nicename`, `user_email`,\n        `user_url`, `user_registered`, `user_activation_key`, `user_status`,  `user_intro`,\n        `user_level`, `user_session`) VALUES(1, '{$admin_user}', '" . $admin_password . "', '管理员', '{$admin_email}',\n         '', '{$time}', '', 1, '我是admin,欢迎使用', 2, '{$user_session}');";
     if (!mysql_query($admin_query, $conn)) {
         $this->error(' 插入管理员数据出错');
     }
     $cquery = "Update `{$db_prefix}options` set option_value='{$title}' where option_name='title';";
     if (!mysql_query($cquery, $conn)) {
         $this->error(' 更新配置数据出错');
     }
     $cquery = "Update `{$db_prefix}options` set option_value='{$site_url}' where option_name='site_url';";
     if (!mysql_query($cquery, $conn)) {
         $this->error(' 更新配置数据出错');
     }
     $software_version = GreenCMS_Version;
     $software_build = GreenCMS_Build;
     $cquery = "Update `{$db_prefix}options` set option_value='{$software_version}' where option_name='software_version';";
     if (!mysql_query($cquery, $conn)) {
         $this->error(' 更新配置数据出错');
     }
     $cquery = "Update `{$db_prefix}options` set option_value='{$software_build}' where option_name='software_build';";
     if (!mysql_query($cquery, $conn)) {
         $this->error(' 更新配置数据出错');
     }
     //TODO              写不下去了
     $this->redirect('Install/Index/step5');
 }