|
楼主 |
发表于 2007 年 1 月 29 日 22:40:31
|
显示全部楼层
-
- $query = $DB->query("SELECT VERSION()");
- $curr_mysql_version = $DB->result($query, 0);
- if($curr_mysql_version < '3.23') {
- $msg .= "<font color="#FF0000">您的MySQL版本低于3.23, 由于程序没有经过此平台的测试, 建议您换 MySQL4 的数据库服务器.</font><br />";
- $quit = TRUE;
- }
- if(strstr($db_prefix, '.')) {
- $msg .= "<font color="#FF0000">您指定的数据表前缀包含点字符,请返回修改.</font><br />";
- $quit = TRUE;
- }
- $DB->select_db($dbname);
- if($DB->geterrdesc()) {
- if(mysql_get_server_info() > '4.1') {
- $DB->query("CREATE DATABASE $dbname DEFAULT CHARACTER SET $dbcharset");
- } else {
- $DB->query("CREATE DATABASE $dbname");
- }
- if($DB->geterrdesc()) {
- $msg .= "<font color="#FF0000">指定的数据库不存在, 系统也无法自动建立, 无法安装 SaBlog-X.</font><br />";
- $quit = TRUE;
- } else {
- $DB->select_db($dbname);
- $msg .= "成功建立指定数据库<br />";
- }
- }
- $query - $DB->query("SELECT COUNT(*) FROM ".$db_prefix."settings", 'SILENT');
- if(!$DB->geterrdesc()) {
- $msg .= "<font color="#FF0000">数据库中已经安装过 SaBlog-X, 继续安装会清空原有数据.</font><br />";
- $alert = " onclick="return confirm('继续安装会清空全部原有数据, 您确定要继续吗?');"";
- } else {
- $alert = '';
- }
- if($quit) {
- $msg .= "<font color="#FF0000">由于您目录属性或服务器配置原因, 无法继续安装 SaBlog-X, 请仔细阅读安装说明.</font>";
- } else {
- $msg .= "您的服务器可以安装和使用 SaBlog-X, 请进入下一步安装.";
- }
- if ($msg) {
- echo "<p>".$msg."</p>";
- }
- if($quit) {
- ?>
- <p align="right">
- <input type="button" value="重新执行此步骤" onclick="javascript: window.location=('install.php?step=environment');"> <input type="button" value="退出" onclick="javascript: window.close();">
- </p>
- <?
- } else {
- ?>
- <p> ;</p>
- <table width="100%" border="0" cellspacing="0" cellpadding="4">
- <tr>
- <td width="30%" nowrap>用户名:</td>
- <td><input type="text" value="" name="username" class="formfield" style="width:150px"></td>
- </tr>
- <tr>
- <td width="30%" nowrap>昵称:</td>
- <td><input type="text" value="" name="nickname" class="formfield" style="width:150px"> 可选</td>
- </tr>
- <tr>
- <td width="30%" nowrap>密码:</td>
- <td><input type="password" value="" name="password" class="formfield" style="width:150px"></td>
- </tr>
- <tr>
- <td width="30%" nowrap>确认密码:</td>
- <td><input type="password" value="" name="comfirpassword" class="formfield" style="width:150px"></td>
- </tr>
- </table>
- <p> ;</p>
- <hr noshade="noshade" />
- <p align="right">
- <input type="hidden" name="step" value="4" />
- <input class="formbutton" type="submit" value="下一步" <?php echo $alert;?> />
- </p>
- <?php
- }
- }
- } elseif ($step == '4') {
- //addslashes()自动将字符串的'等符号加上转义符.注意:该函数无法阻拦;号的注入
- $username = addslashes(trim($_POST['username']));
- $nickname = addslashes(trim($_POST['nickname']));
- $password = addslashes(trim($_POST['password']));
- $comfirpassword = addslashes(trim($_POST['comfirpassword']));
- ?>
- <p class="title">第四步:检查信息合法性</p>
- <?php
- if (trim($_POST['username']) == "" || trim($_POST['password']) == "" || trim($_POST['comfirpassword']) == "") {
- $msg = "<p>请返回并输入所有必填选项, 请返回重新输入.</p>";
- $quit = TRUE;
- } elseif (strlen($_POST['password']) < 8) {
- $msg = "<p>从系统的安全角度考虑, 密码长度不能少于8字节, 请返回重新输入.</p>";
- $quit = TRUE;
- } elseif ($_POST['password'] != $_POST['comfirpassword']) {
- $msg = "<p>两个输入的密码不相同, 请返回重新输入.</p>";
- $quit = TRUE;
- } else {
- $msg = "<p>检查信息合法性... 成功</p>";
- $quit = FALSE;
- }
- if ($quit) {
- echo $msg;
- ?>
- <hr noshade="noshade" />
- <p align="right">
- <input class="formbutton" type="button" value="上一步" onclick="history.back(1)" />
- </p>
- <?php
- } else {
- echo $msg;
- ?>
- <p> ;</p>
- <p>用户名: <?php echo $username;?><input type="hidden" name="username" value="<?php echo $username;?>" /></p>
- <?php
- if ($nickname) {
- ?>
- <p>昵称: <?php echo $nickname;?><input type="hidden" name="nickname" value="<?php echo $nickname;?>" /></p>
- <?php
- }
- ?>
- <p>密码: <?php echo $password;?><input type="hidden" name="password" value="<?php echo $password;?>" /></p>
- <p> ;</p>
- <p>核对无误后点击下一步开始导入数据.</p>
- <hr noshade="noshade" />
- <p align="right">
- <input type="hidden" name="step" value="5" />
- <input class="formbutton" type="submit" value="下一步" />
- </p>
- <?php
- }
- } elseif ($step == '5') {
- $username = addslashes(trim($_POST['username']));
- $nickname = addslashes(trim($_POST['nickname']));
- $password = addslashes(trim($_POST['password']));
- ?>
- <p class="title">第五步:导入数据</p>
- <p>
- <?php
- include ($configfile);
- include ('../include/func_db_mysql.php');
- $DB = new DB_MySQL;
- $DB->connect($servername, $dbusername, $dbpassword, $dbname, $usepconnect);
- unset($servername, $dbusername, $dbpassword, $usepconnect);
- runquery($sql);
- $DB->query("INSERT INTO ".$db_prefix."admin (username, nickname, password, allowarticle, allowattachment, allowcache, allowcategory, allowcomment, allowconfigurate, allowdatabase, allowlinks, allowlog, allowtags, allowtemplate, allowtrackback, allowuser) VALUES ('".$username."', '".$nickname."', '".md5($password)."', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1')");
- ?>
- </p>
- <p>共创建了<?php echo $tablenum;?>个数据表.</p>
- <hr noshade="noshade" />
- <p>安装程序已经顺利执行完毕,请尽快删除整个 install 目录,以免被他人恶意利用。</p>
- <p>感谢您使用Sa系列Web应用程序.</p>
- <p> ;</p>
- <p>用户名: <?php echo $username;?></p>
- <p>密码: <?php echo $password;?></p>
- <p> ;</p>
- <p><a href="../">点击这里进入首页</a><br /><a href="../admin/admincp.php">点击这里进入后台</a></p>
- <hr noshade="noshade" />
- <p align="right"><a href="http://www.4ngel.net">Welcome to Security Angel Team</a></p>
- <?php
- }
- ?>
- </form>
- </div>
- <strong>Powered by SaBlog-X 1.2 (C) 2003-2005 Security Angel Team</strong>
- </body>
- </html>
- <?php
- function result($result = 1, $output = 1) {
- if($result) {
- $text = '... <font color="#0000EE">Yes</font><br />';
- if(!$output) {
- return $text;
- }
- echo $text;
- } else {
- $text = '... <font color="#FF0000">No</font><br />';
- if(!$output) {
- return $text;
- }
- echo $text;
- }
- }
- function runquery($sql) {
- global $dbcharset, $db_prefix, $DB, $tablenum;
- // str_replace(代替换字符串,替换字符串,字符串):将所有的代替换字符串替换成新的。
- // 返回:替换后的字符串
- //
- // explode--使用一个字符串分割另一个字符串
- // 描述
- // array explode ( string separator, string string [, int limit] )
- // 此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
- //
- // 如果 separator 为空字符串(""),explode() 将返回 FALSE。如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组。
- //
- // 如果 limit 参数是负数,则返回除了最后的 limit 个元素外的所有元素。
- // substr(字符串,起始位,末位);截取字符串
- $sql = str_replace("\r", "\n", str_replace(' sablog_', ' '.$db_prefix, $sql));
- $ret = array();
- $num = 0;
- foreach(explode(";\n", trim($sql)) as $query) {
- $queries = explode("\n", trim($query));
- foreach($queries as $query) {
- $ret[$num] .= $query[0] == '#' ? '' : $query;
- }
- $num++;
- }
- unset($sql);
- foreach($ret as $query) {
- $query = trim($query);
- if($query) {
- if(substr($query, 0, 12) == 'CREATE TABLE') {
- $name = preg_replace("/CREATE TABLE ([a-z0-9_]+) .*/is", "\\1", $query);
- echo '创建表 '.$name.' ... <font color="#0000EE">成功</font><br />';
- $DB->query(createtable($query, $dbcharset));
- $tablenum++;
- } else {
- $DB->query($query);
- }
- }
- }
- }
- //strtoupper() Make a string uppercase
- function createtable($sql, $dbcharset) {
- $type = strtoupper(preg_replace("/^\s*CREATE TABLE\s+.+\s+\(.+?\).*(ENGINE|TYPE)\s*=\s*([a-z]+?).*$/isU", "\\2", $sql));
- $type = in_array($type, array('MYISAM', 'HEAP')) ? $type : 'MYISAM';
- return preg_replace("/^\s*(CREATE TABLE\s+.+\s+\(.+?\)).*$/isU", "\\1", $sql).
- (mysql_get_server_info() > '4.1' ? " ENGINE=$type DEFAULT CHARSET=$dbcharset" : " TYPE=$type");
- }
- ?>
复制代码 |
|