diff --git a/.gitignore b/.gitignore index 9f36991..070fb72 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ /.vscode *.log */.DS_Store -.env +/.env /runtime /composer.lock /public/install/install.lock diff --git a/public/install/.env b/public/install/.env new file mode 100644 index 0000000..4d65335 --- /dev/null +++ b/public/install/.env @@ -0,0 +1 @@ +APP_DEBUG = false [APP] DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = #DB_HOST# HOSTPORT = #DB_PORT# USERNAME = #DB_USER# PASSWORD = #DB_PWD# DATABASE = #DB_NAME# PREFIX = #DB_PREFIX# CHARSET = utf8 DEBUG = #DB_DEBUG# [LANG] default_lang = zh-cn \ No newline at end of file diff --git a/public/install/index.php b/public/install/index.php index 7ee0312..5bffb17 100644 --- a/public/install/index.php +++ b/public/install/index.php @@ -1,8 +1,8 @@ phpversion()){ - header("Content-type:text/html;charset=utf-8"); - exit('您的php版本过低,不能安装本软件,请升级到'.PHP_EDITION.'或更高版本再安装,谢谢!'); +if (PHP_EDITION > phpversion()) { + header("Content-type:text/html;charset=utf-8"); + exit('您的php版本过低,不能安装本软件,请升级到' . PHP_EDITION . '或更高版本再安装,谢谢!'); } define("APEBLOG_VERSION", '20200601'); @@ -29,13 +29,10 @@ error_reporting(E_ALL & ~E_NOTICE); header('Content-Type: text/html; charset=UTF-8'); define('SITE_DIR', _dir_path(substr(dirname(__FILE__), 0, -8)));//入口文件目录 define('APP_DIR', _dir_path(substr(dirname(__FILE__), 0, -15)));//项目目录 -//define('SITEDIR2', substr(SITEDIR,0,-7)); -//echo SITEDIR; -//exit;SITE_DIR //数据库 -$sqlFile = 'ape_blog.sql'; -$configFile = '.env'; -if (!file_exists(SITE_DIR . 'install/' . $sqlFile) || !file_exists(SITE_DIR . 'install/' . $configFile)) { +$sqlFile = SITE_DIR . 'install/ape_blog.sql'; +$configFile = SITE_DIR . 'install/.env'; +if (!file_exists($sqlFile) || !file_exists($configFile)) { echo '缺少必要的安装文件!'; exit; } @@ -54,7 +51,7 @@ $step = isset($_GET['step']) ? $_GET['step'] : 1; $scriptName = !empty($_SERVER["REQUEST_URI"]) ? $scriptName = $_SERVER["REQUEST_URI"] : $scriptName = $_SERVER["PHP_SELF"]; $rootpath = @preg_replace("/\/(I|i)nstall\/index\.php(.*)$/", "", $scriptName); $domain = empty($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']; -if ((int) $_SERVER['SERVER_PORT'] != 80) { +if ((int)$_SERVER['SERVER_PORT'] != 80) { $domain .= ":" . $_SERVER['SERVER_PORT']; } $domain = $domain . $rootpath; @@ -62,13 +59,13 @@ $domain = $domain . $rootpath; switch ($step) { case '1': - include_once ("./templates/step1.php"); + include_once("./templates/step1.php"); exit(); case '2': if (phpversion() <= PHP_EDITION) { - die('本系统需要PHP版本 >= '.PHP_EDITION.'环境,当前PHP版本为:' . phpversion()); + die('本系统需要PHP版本 >= ' . PHP_EDITION . '环境,当前PHP版本为:' . phpversion()); } $phpv = @ phpversion(); @@ -112,32 +109,32 @@ switch ($step) { $session = ' 不支持'; $err++; } - if(function_exists('curl_init')){ - $curl = '[√]支持 '; - }else{ - $curl = '[×]不支持'; - $err++; + if (function_exists('curl_init')) { + $curl = '[√]支持 '; + } else { + $curl = '[×]不支持'; + $err++; } - if(function_exists('bcadd')){ + if (function_exists('bcadd')) { $bcmath = '[√]支持 '; - }else{ + } else { $bcmath = '[×]不支持'; $err++; } - if(function_exists('openssl_encrypt')){ + if (function_exists('openssl_encrypt')) { $openssl = '[√]支持 '; - }else{ + } else { $openssl = '[×]不支持'; $err++; } - if(function_exists('finfo_open')){ + if (function_exists('finfo_open')) { $finfo_open = '[√]支持 '; - }else{ + } else { $finfo_open = '[×]不支持'; $err++; } - + $folder = array( 'public/install', 'public/upload', @@ -145,30 +142,30 @@ switch ($step) { '.env', ); //必须开启函数 - if(function_exists('file_put_contents')){ + if (function_exists('file_put_contents')) { $file_put_contents = '[√]开启 '; - }else{ + } else { $file_put_contents = '[×]关闭'; $err++; } - if(function_exists('imagettftext')){ + if (function_exists('imagettftext')) { $imagettftext = '[√]开启 '; - }else{ + } else { $imagettftext = '[×]关闭'; $err++; } - include_once ("./templates/step2.php"); + include_once("./templates/step2.php"); exit(); case '3': - $dbName = strtolower(trim($_POST['dbName'])); - $_POST['dbport'] = $_POST['dbport'] ? $_POST['dbport'] : '3306'; + $dbName = strtolower(trim($_POST['dbName'])); + $_POST['dbport'] = $_POST['dbport'] ? $_POST['dbport'] : '3306'; if ($_GET['testdbpwd']) { $dbHost = $_POST['dbHost']; - $conn = @mysqli_connect($dbHost, $_POST['dbUser'], $_POST['dbPwd'],NULL,$_POST['dbport']); - if (mysqli_connect_errno($conn)){ - die(json_encode(0)); + $conn = @mysqli_connect($dbHost, $_POST['dbUser'], $_POST['dbPwd'], NULL, $_POST['dbport']); + if (mysqli_connect_errno($conn)) { + die(json_encode(0)); } else { // $result = mysqli_query($conn,"SELECT @@global.sql_mode"); // $result = $result->fetch_array(); @@ -178,15 +175,15 @@ switch ($step) { // if(strstr($result[0],'STRICT_TRANS_TABLES') || strstr($result[0],'STRICT_ALL_TABLES') || strstr($result[0],'TRADITIONAL') || strstr($result[0],'ANSI')) // exit(json_encode(-1)); // } - $result = mysqli_query($conn,"select count(table_name) as c from information_schema.`TABLES` where table_schema='$dbName'"); - $result = $result->fetch_array(); - if($result['c'] > 0) - exit(json_encode(-2)); - + $result = mysqli_query($conn, "select count(table_name) as c from information_schema.`TABLES` where table_schema='$dbName'"); + $result = $result->fetch_array(); + if ($result['c'] > 0) + exit(json_encode(-2)); + exit(json_encode(1)); } - } - include_once ("./templates/step3.php"); + } + include_once("./templates/step3.php"); exit(); @@ -204,17 +201,16 @@ switch ($step) { $dbPrefix = empty($_POST['dbprefix']) ? 'ape_' : trim($_POST['dbprefix']); $username = trim($_POST['manager']); $password = trim($_POST['manager_pwd']); - $email = trim($_POST['manager_email']); + $email = trim($_POST['manager_email']); if (!function_exists('mysqli_connect')) { $arr['msg'] = "请安装 mysqli 扩展!"; echo json_encode($arr); exit; - } - ; - $conn = @mysqli_connect($dbHost, $dbUser, $dbPwd,NULL,$_POST['dbport']); - if (mysqli_connect_errno($conn)){ - $arr['msg'] = "连接数据库失败!".mysqli_connect_error($conn); + }; + $conn = @mysqli_connect($dbHost, $dbUser, $dbPwd, NULL, $_POST['dbport']); + if (mysqli_connect_errno($conn)) { + $arr['msg'] = "连接数据库失败!" . mysqli_connect_error($conn); echo json_encode($arr); exit; } @@ -226,24 +222,24 @@ switch ($step) { exit; } - if (!mysqli_select_db($conn,$dbName)) { + if (!mysqli_select_db($conn, $dbName)) { //创建数据时同时设置编码 - if (!mysqli_query($conn,"CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET utf8;")) { + if (!mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `" . $dbName . "` DEFAULT CHARACTER SET utf8;")) { $arr['msg'] = '数据库 ' . $dbName . ' 不存在,也没权限创建新的数据库!'; echo json_encode($arr); exit; } - if ($n==-1) { + if ($n == -1) { $arr['n'] = 0; $arr['msg'] = "成功创建数据库:{$dbName}
"; echo json_encode($arr); exit; } - mysqli_select_db($conn , $dbName); + mysqli_select_db($conn, $dbName); } //读取数据文件 - $sqldata = file_get_contents(SITE_DIR . 'install/' . $sqlFile); + $sqldata = file_get_contents($sqlFile); $sqlFormat = sql_split($sqldata, $dbPrefix); //创建写入sql数据库文件到库中 结束 @@ -255,65 +251,63 @@ switch ($step) { $sql = trim($sqlFormat[$i]); if (strstr($sql, 'CREATE TABLE')) { preg_match('/CREATE TABLE `ape_([^ ]*)`/is', $sql, $matches); - mysqli_query($conn,"DROP TABLE IF EXISTS `$matches[1]"); - $sql = str_replace('`ape_','`'.$dbPrefix,$sql);//替换表前缀 - $ret = mysqli_query($conn,$sql); + mysqli_query($conn, "DROP TABLE IF EXISTS `$matches[1]"); + $sql = str_replace('`ape_', '`' . $dbPrefix, $sql);//替换表前缀 + $ret = mysqli_query($conn, $sql); if ($ret) { - $message = '
  • 创建数据表['.$dbPrefix.$matches[1] . ']完成!'.date('Y-m-d H:i:s').'
  • '; + $message = '
  • 创建数据表[' . $dbPrefix . $matches[1] . ']完成!' . date('Y-m-d H:i:s') . '
  • '; } else { - $message = '
  • 创建数据表['.$dbPrefix.$matches[1] . ']失败!'.date('Y-m-d H:i:s').'
  • '; + $message = '
  • 创建数据表[' . $dbPrefix . $matches[1] . ']失败!' . date('Y-m-d H:i:s') . '
  • '; } $i++; $arr = array('n' => $i, 'msg' => $message); echo json_encode($arr); exit; } else { - if(trim($sql) == '') + if (trim($sql) == '') continue; - $sql = str_replace('`ape_','`'.$dbPrefix,$sql);//替换表前缀 - $ret = mysqli_query($conn,$sql); + $sql = str_replace('`ape_', '`' . $dbPrefix, $sql);//替换表前缀 + $ret = mysqli_query($conn, $sql); $message = ''; $arr = array('n' => $i, 'msg' => $message); // echo json_encode($arr); exit; } } // 清理掉管理员表 - mysqli_query($conn,"truncate table ".str_replace('ape_',$dbPrefix,'ape_admin')); - // 清空测试数据 - if(!$_POST['demo']) - { - $bl_table = array('ape_admin' - ,'ape_admin_log' - ,'ape_admin_notify' - ,'ape_advert' - ,'ape_attachment' - ,'ape_attachment_category' - ,'ape_document' - ,'ape_document_article' - ,'ape_document_category' - ,'ape_document_category_content' - ,'ape_document_product' - ,'ape_friend_link' - ,'ape_invitation_code' - ,'ape_message_form' - ,'ape_pv_log' - ,'ape_tag' - ,'ape_url_log' - ,'ape_user' - ,'ape_uv_log'); - foreach($bl_table as $k => $v) - { - $bl_table[$k] = str_replace('ape_',$dbPrefix,$v); - } - - foreach($bl_table as $key => $val) - { - mysqli_query($conn,"truncate table ".$val); - } - delFile(APP_DIR.'/public/upload'); // 清空测试图片 - } + mysqli_query($conn, "truncate table " . str_replace('ape_', $dbPrefix, 'ape_admin')); + // 清空测试数据 + if (!$_POST['demo']) { + $bl_table = array('ape_admin' + , 'ape_admin_log' + , 'ape_admin_notify' + , 'ape_advert' + , 'ape_attachment' + , 'ape_attachment_category' + , 'ape_document' + , 'ape_document_article' + , 'ape_document_category' + , 'ape_document_category_content' + , 'ape_document_product' + , 'ape_friend_link' + , 'ape_invitation_code' + , 'ape_message_form' + , 'ape_pv_log' + , 'ape_tag' + , 'ape_url_log' + , 'ape_user' + , 'ape_uv_log'); + foreach ($bl_table as $k => $v) { + $bl_table[$k] = str_replace('ape_', $dbPrefix, $v); + } + + foreach ($bl_table as $key => $val) { + mysqli_query($conn, "truncate table " . $val); + } + delFile(APP_DIR . '/public/upload'); // 清空测试图片 + } //读取配置文件,并替换真实配置数据1 - $strConfig = file_get_contents(SITE_DIR . 'install/' . $configFile); + + $strConfig = file_get_contents($configFile); $strConfig = str_replace('#DB_HOST#', $dbHost, $strConfig); $strConfig = str_replace('#DB_NAME#', $dbName, $strConfig); $strConfig = str_replace('#DB_USER#', $dbUser, $strConfig); @@ -322,59 +316,72 @@ switch ($step) { $strConfig = str_replace('#DB_PREFIX#', $dbPrefix, $strConfig); $strConfig = str_replace('#DB_CHARSET#', 'utf8', $strConfig); $strConfig = str_replace('#DB_DEBUG#', 'false', $strConfig); - @file_put_contents(APP_DIR . '.env', $strConfig); //数据库配置文件的地址 - @chmod(APP_DIR . '.env',0777); //数据库配置文件的地址// + //检查文件是否存在 + $newConfigFile = APP_DIR . '.env'; + if (!file_exists($newConfigFile)) { + @copy($configFile, $newConfigFile); + } else if (is_dir($newConfigFile)) { + @rmdir($newConfigFile); + @copy($configFile, $newConfigFile); + } + @file_put_contents($newConfigFile, $strConfig); //数据库配置文件的地址 + @chmod($newConfigFile, 0777); //数据库配置文件的地址// //更新网站配置信息2 //插入管理员表字段ape_admin表 $time = time(); $password = md5(md5(trim($_POST['manager_pwd']))); // 清理掉管理员表和用户表 - mysqli_query($conn,"truncate table {$dbPrefix}admin"); - mysqli_query($conn,"truncate table {$dbPrefix}user"); - $addAdminSql = "INSERT INTO `{$dbPrefix}admin` (`id`, `uid`,`username`, `nickname`, `password`, `role_id`, `status`, `create_time`, `create_user`) VALUES". - "(1, 1,'".$username."', 'admin' ,'".$password."', 1, 1, $time, '1')"; - $addUserSql = "INSERT INTO `{$dbPrefix}user` (`id`, `username`, `nickname`, `password`, `status`, `is_admin`, `create_time`) VALUES ". - "(1,'".$username."', 'admin' ,'".$password."', 1, 1, $time);"; + mysqli_query($conn, "truncate table {$dbPrefix}admin"); + mysqli_query($conn, "truncate table {$dbPrefix}user"); + $addAdminSql = "INSERT INTO `{$dbPrefix}admin` (`id`, `uid`,`username`, `nickname`, `password`, `role_id`, `status`, `create_time`, `create_user`) VALUES" . + "(1, 1,'" . $username . "', 'admin' ,'" . $password . "', 1, 1, $time, '1')"; + $addUserSql = "INSERT INTO `{$dbPrefix}user` (`id`, `username`, `nickname`, `password`, `status`, `is_admin`, `create_time`) VALUES " . + "(1,'" . $username . "', 'admin' ,'" . $password . "', 1, 1, $time);"; //插入前台用户和管理员 - mysqli_query($conn,$addUserSql); - $res = mysqli_query($conn,$addAdminSql); - if($res){ + mysqli_query($conn, $addUserSql); + $res = mysqli_query($conn, $addAdminSql); + if ($res) { $message = '成功添加管理员
    成功写入配置文件
    安装完成.'; $arr = array('n' => 999999, 'msg' => $message); - echo json_encode($arr);exit; - }else{ + echo json_encode($arr); + exit; + } else { $message = '添加管理员失败
    成功写入配置文件
    安装完成.'; $arr = array('n' => 999999, 'msg' => $message); - echo json_encode($arr);exit; + echo json_encode($arr); + exit; } } - include_once ("./templates/step4.php"); + include_once("./templates/step4.php"); exit(); case '5': - $ip = get_client_ip(); - $host = $_SERVER['HTTP_HOST']; + $ip = get_client_ip(); + $host = $_SERVER['HTTP_HOST']; installlog(); - include_once ("./templates/step5.php"); + include_once("./templates/step5.php"); @touch('./install.lock'); exit(); } //写入安装信息 -function installlog(){ +function installlog() +{ $mt_rand_str = sp_random_string(6); - $str_constant = " \ No newline at end of file