ThinkPHP6.0學習之項目安裝頁面的開發


  在我們做一個項目的時候,如果是自己用或者是給同行用的話往往不需要做一個安裝頁面的,但是如果是將項目給一些不怎么會操作服務器,不怎么會程序的人用的時候,我們就需要一個安裝頁面來幫助他們更好的將項目安裝好。廢話補多少了,我們直接開始教學吧,我這個是基於tp6.0上的,如果不是tp6.0也可以使用,稍作修改就行了,按自己的需求來。

       首先,我們先從入口文件入手,先判斷一下是否已經安裝好項目了,我們通過文件鎖來進行判斷。判斷是否存在install.lock文件,如果存在證明已經安裝了,否則就還沒有安裝,就需要跳轉到安裝頁面了,代碼如下:

// [ 應用入口文件 ]

namespace think;

// 定義目錄分隔符

define('DS', DIRECTORY_SEPARATOR);

// 定義根目錄

define('ROOT_PATH', __DIR__ . DS . '..' . DS);

// 定義應用目錄

define('APP_PATH', ROOT_PATH . 'app' . DS);

// 判斷是否安裝了項目

if (!is_file(APP_PATH . 'install/install.lock'))

{

    header("location:./install.php");

    exit;

}

require __DIR__ . '/../vendor/autoload.php';

// 執行HTTP應用並響應

$http = (new App())->http;

$response = $http->run();

$response->send();

$http->end($response);

  

我們需要再public文件夾下新建一個install.php的文件。還有在app文件夾下創建一個install文件夾,並將我們項目的數據庫命名為install.sql放到install文件夾下面。

 

我們先定義幾個常量和會用到的變量,方便以后使用。

// 定義目錄分隔符

define('DS', DIRECTORY_SEPARATOR);

// 定義根目錄

define('ROOT_PATH', __DIR__ . DS . '..' . DS);

// 定義應用目錄

define('APP_PATH', ROOT_PATH . 'app' . DS);

// 安裝包目錄

define('INSTALL_PATH', APP_PATH . 'install' . DS);

//項目名稱

$sitename = "tp6";

//鏈接

$link = array(

     'qqun'  => "",

     'home'  => '',

     'doc'   => '',

);

// 檢測目錄是否存在,這個可以按自己的需求進行修改

$checkDirs = [

    'vendor'

];

//緩存目錄

$runtimeDir = APP_PATH . 'runtime';

//錯誤信息

$errInfo = '';

//數據庫配置文件

$dbConfigFile = ROOT_PATH. 'config'. DS. 'database.php';

//后台入口文件

$adminFile = ROOT_PATH . 'public' . DS . 'admin.php';

// 鎖定的文件

$lockFile = INSTALL_PATH . 'install.lock';

定義好后,我們先寫個函數來判斷特定文件或文件夾的讀寫權限,如果沒有讀寫權限的話,我們是沒法操作的,Windows系統一般不用擔心這個問題,如果是Linux的話需要我們去修改一下權限為777。

// 判斷文件或目錄是否有寫的權限

function is_really_writable($file)

{

    if (DIRECTORY_SEPARATOR == '/' AND @ ini_get("safe_mode") == false) {

        return is_writable($file);

    }

    if (!is_file($file) OR ($fp = @fopen($file, "r+")) === false) {

        return false;

    }

    fclose($fp);

    return true;

}

接下來我們就要進行一系列的判斷,這個主要是為了能夠正常安裝項目,首先需要判斷是否已經安裝了項目,然后就是環境的判斷,比如PHP版本是否大於或等於7.1.0,是否開啟了PDO,數據庫配置文件是否可讀寫等等。來,直接上代碼:

// 當前是POST請求

if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {

    if ($errInfo) {//錯誤信息

        echo $errInfo;

        exit;

    }

    $err = '';

    $mysqlHostname = isset($_POST['mysqlHost']) ? $_POST['mysqlHost'] : '127.0.0.1';//數據庫地址

    $mysqlHostport = isset($_POST['mysqlHostport']) ? $_POST['mysqlHostport'] : 3306;//端口號

    $hostArr = explode(':', $mysqlHostname);//如果數據庫地址中填寫了端口號,將他們分開

    if (count($hostArr) > 1) {

        $mysqlHostname = $hostArr[0];

        $mysqlHostport = $hostArr[1];

    }

    $mysqlUsername = isset($_POST['mysqlUsername']) ? $_POST['mysqlUsername'] : 'root';//用戶名

    $mysqlPassword = isset($_POST['mysqlPassword']) ? $_POST['mysqlPassword'] : '';//密碼

    $mysqlDatabase = isset($_POST['mysqlDatabase']) ? $_POST['mysqlDatabase'] : 'tp6';//數據庫名

    $mysqlPrefix = isset($_POST['mysqlPrefix']) ? $_POST['mysqlPrefix'] : 'tp_';//前綴

    $adminUsername = isset($_POST['adminUsername']) ? $_POST['adminUsername'] : 'admin';//后台管理者用戶名

    $adminPassword = isset($_POST['adminPassword']) ? $_POST['adminPassword'] : '123456';//后台管理者密碼

    $adminPasswordConfirmation = isset($_POST['adminPasswordConfirmation']) ? $_POST['adminPasswordConfirmation'] : '123456';//重復密碼

    $adminEmail = isset($_POST['adminEmail']) ? $_POST['adminEmail'] : 'admin@admin.com';//郵箱

    if (!preg_match("/^\w{3,12}$/", $adminUsername)) {

        echo "用戶名只能由3-12位數字、字母、下划線組合";

        exit;

    }

    if (!preg_match("/^[\S]{6,16}$/", $adminPassword)) {

        echo "密碼長度必須在6-16位之間,不能包含空格";

        exit;

    }

    if ($adminPassword !== $adminPasswordConfirmation) {

        echo "兩次輸入的密碼不一致";

        exit;

    }

    try {

        //檢測能否讀取安裝文件

        $sql = @file_get_contents(INSTALL_PATH . 'install.sql');

        if (!$sql) {

            throw new Exception("無法讀取app/install/install.sql文件,請檢查是否有讀權限");

        }

        $sql = str_replace("`fa_", "`{$mysqlPrefix}", $sql);

        $pdo = new PDO("mysql:host={$mysqlHostname};port={$mysqlHostport}", $mysqlUsername, $mysqlPassword, array(

            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,

            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"

        ));

        //檢測是否支持innodb存儲引擎

        $pdoStatement = $pdo->query("SHOW VARIABLES LIKE 'innodb_version'");

        $result = $pdoStatement->fetch();

        if (!$result) {

            throw new Exception("當前數據庫不支持innodb存儲引擎,請開啟后再重新嘗試安裝");

        }

        $pdo->query("CREATE DATABASE IF NOT EXISTS `{$mysqlDatabase}` CHARACTER SET utf8 COLLATE utf8_general_ci;");

        $pdo->query("USE `{$mysqlDatabase}`");

        $pdo->exec($sql);

        $config = @file_get_contents($dbConfigFile);

        $callback = function ($matches) use ($mysqlHostname, $mysqlHostport, $mysqlUsername, $mysqlPassword, $mysqlDatabase, $mysqlPrefix) {

            $field = ucfirst($matches[1]);//首字符大寫

            $replace = ${"mysql{$field}"};//$mysqlHostname,$mysqlHostport,$mysqlUsername,$mysqlPassword,$mysqlDatabase,$mysqlPrefix

            if ($matches[1] == 'hostport' && $mysqlHostport == 3306) {

                $replace = '';

            }

            return "'{$matches[1]}'{$matches[2]}=>{$matches[3]}env('database.{$matches[1]}', '{$replace}'),";

        };

        $config = preg_replace_callback("/'(hostname|database|username|password|hostport|prefix)'(\s+)=>(\s+)env\((.*)\)\,/", $callback, $config);

        //檢測能否成功寫入數據庫配置

        $result = @file_put_contents($dbConfigFile, $config);

        if (!$result) {

            throw new Exception("無法寫入數據庫信息到config/database.php文件,請檢查是否有寫權限");

        }

        //檢測能否成功寫入lock文件

        $result = @file_put_contents($lockFile, 1);

        if (!$result) {

            throw new Exception("無法寫入安裝鎖定到app/install/install.lock文件,請檢查是否有寫權限");

        }

        $newSalt = substr(md5(uniqid(true)), 0, 6);

        $newPassword = md5(md5($adminPassword) . $newSalt);

        $pdo->query("UPDATE {$mysqlPrefix}admin SET username = '{$adminUsername}', email = '{$adminEmail}',password = '{$newPassword}', salt = '{$newSalt}' WHERE username = 'admin'");

        $adminName = '';

        if (is_file($adminFile)) {//修改后台入口文件名

            $x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

            $adminName = substr(str_shuffle(str_repeat($x, ceil(10 / strlen($x)))), 1, 10) . '.php';

            rename($adminFile, ROOT_PATH . 'public' . DS . $adminName);

        }

        echo "success|{$adminName}";

    } catch (PDOException $e) {

        $err = $e->getMessage();

    } catch (Exception $e) {

        $err = $e->getMessage();

    }

    echo $err;

    exit;

}

下面是完整的代碼:

<?php
/**
 * 安裝完成后建議刪除此文件
 */
// error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// ini_set('display_errors', '1');
// 定義目錄分隔符
define('DS', DIRECTORY_SEPARATOR);

// 定義根目錄
define('ROOT_PATH', __DIR__ . DS . '..' . DS);

// 定義應用目錄
define('APP_PATH', ROOT_PATH . 'app' . DS);

// 安裝包目錄
define('INSTALL_PATH', APP_PATH . 'install' . DS);

// 判斷文件或目錄是否有寫的權限
function is_really_writable($file)
{
    if (DIRECTORY_SEPARATOR == '/' AND @ ini_get("safe_mode") == false) {
        return is_writable($file);
    }
    if (!is_file($file) OR ($fp = @fopen($file, "r+")) === false) {
        return false;
    }
    fclose($fp);
    return true;
}

$sitename = "tp6";

$link = array(
    'qqun'  => "",
    'home'  => '',
    'doc'   => '',
);

// 檢測目錄是否存在
$checkDirs = [
    'vendor'
    // 'public' . DS . 'assets' . DS . 'libs'
];
//緩存目錄
$runtimeDir = APP_PATH . 'runtime';

//錯誤信息
$errInfo = '';

//數據庫配置文件
$dbConfigFile = ROOT_PATH. 'config'. DS. 'database.php';

//后台入口文件
$adminFile = ROOT_PATH . 'public' . DS . 'admin.php';

// 鎖定的文件
$lockFile = INSTALL_PATH . 'install.lock';

if (is_file($lockFile)) {
    $errInfo = "當前已經安裝{$sitename},如果需要重新安裝,請手動移除app/install/install.lock文件";
} else {
    if (version_compare(PHP_VERSION, '7.1.0', '<')) {
        $errInfo = "當前版本(" . PHP_VERSION . ")過低,請使用PHP7.1.0以上版本";
    } else {
        if (!extension_loaded("PDO")) {
            $errInfo = "當前未開啟PDO,無法進行安裝";
        } else {
            if (!is_really_writable($dbConfigFile)) {
                $open_basedir = ini_get('open_basedir');
                if ($open_basedir) {
                    $dirArr = explode(PATH_SEPARATOR, $open_basedir);
                    if ($dirArr && in_array(__DIR__, $dirArr)) {
                        $errInfo = '當前服務器因配置了open_basedir,導致無法讀取父目錄<br>';
                    }
                }
                if (!$errInfo) {
                    $errInfo = '當前權限不足,無法寫入配置文件config/database.php<br>';
                }
            } else {
                $dirArr = [];
                foreach ($checkDirs as $k => $v) {
                    if (!is_dir(ROOT_PATH . $v)) {
                        $errInfo = '當前代碼僅包含核心代碼,請前往官網下載完整包或資源包覆蓋后再嘗試安裝,';
                        break;
                    }
                }
            }
        }
    }
}

// 當前是POST請求
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($errInfo) {//錯誤信息
        echo $errInfo;
        exit;
    }
    $err = '';
    $mysqlHostname = isset($_POST['mysqlHost']) ? $_POST['mysqlHost'] : '127.0.0.1';//數據庫地址
    $mysqlHostport = isset($_POST['mysqlHostport']) ? $_POST['mysqlHostport'] : 3306;//端口號
    $hostArr = explode(':', $mysqlHostname);//如果數據庫地址中填寫了端口號,將他們分開
    if (count($hostArr) > 1) {
        $mysqlHostname = $hostArr[0];
        $mysqlHostport = $hostArr[1];
    }
    $mysqlUsername = isset($_POST['mysqlUsername']) ? $_POST['mysqlUsername'] : 'root';//用戶名
    $mysqlPassword = isset($_POST['mysqlPassword']) ? $_POST['mysqlPassword'] : '';//密碼
    $mysqlDatabase = isset($_POST['mysqlDatabase']) ? $_POST['mysqlDatabase'] : 'tp6';//數據庫名
    $mysqlPrefix = isset($_POST['mysqlPrefix']) ? $_POST['mysqlPrefix'] : 'tp_';//前綴
    $adminUsername = isset($_POST['adminUsername']) ? $_POST['adminUsername'] : 'admin';//后台管理者用戶名
    $adminPassword = isset($_POST['adminPassword']) ? $_POST['adminPassword'] : '123456';//后台管理者密碼
    $adminPasswordConfirmation = isset($_POST['adminPasswordConfirmation']) ? $_POST['adminPasswordConfirmation'] : '123456';//重復密碼
    $adminEmail = isset($_POST['adminEmail']) ? $_POST['adminEmail'] : 'admin@admin.com';//郵箱

    if (!preg_match("/^\w{3,12}$/", $adminUsername)) {
        echo "用戶名只能由3-12位數字、字母、下划線組合";
        exit;
    }
    if (!preg_match("/^[\S]{6,16}$/", $adminPassword)) {
        echo "密碼長度必須在6-16位之間,不能包含空格";
        exit;
    }
    if ($adminPassword !== $adminPasswordConfirmation) {
        echo "兩次輸入的密碼不一致";
        exit;
    }

    try {
        //檢測能否讀取安裝文件
        $sql = @file_get_contents(INSTALL_PATH . 'install.sql');
        if (!$sql) {
            throw new Exception("無法讀取app/install/install.sql文件,請檢查是否有讀權限");
        }
        $sql = str_replace("`fa_", "`{$mysqlPrefix}", $sql);
        $pdo = new PDO("mysql:host={$mysqlHostname};port={$mysqlHostport}", $mysqlUsername, $mysqlPassword, array(
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
        ));

        //檢測是否支持innodb存儲引擎
        $pdoStatement = $pdo->query("SHOW VARIABLES LIKE 'innodb_version'");
        $result = $pdoStatement->fetch();
        if (!$result) {
            throw new Exception("當前數據庫不支持innodb存儲引擎,請開啟后再重新嘗試安裝");
        }

        $pdo->query("CREATE DATABASE IF NOT EXISTS `{$mysqlDatabase}` CHARACTER SET utf8 COLLATE utf8_general_ci;");

        $pdo->query("USE `{$mysqlDatabase}`");

        $pdo->exec($sql);

        $config = @file_get_contents($dbConfigFile);
        $callback = function ($matches) use ($mysqlHostname, $mysqlHostport, $mysqlUsername, $mysqlPassword, $mysqlDatabase, $mysqlPrefix) {
            $field = ucfirst($matches[1]);//首字符大寫
            $replace = ${"mysql{$field}"};//$mysqlHostname,$mysqlHostport,$mysqlUsername,$mysqlPassword,$mysqlDatabase,$mysqlPrefix
            if ($matches[1] == 'hostport' && $mysqlHostport == 3306) {
                $replace = '';
            }
            return "'{$matches[1]}'{$matches[2]}=>{$matches[3]}env('database.{$matches[1]}', '{$replace}'),";
        };
        $config = preg_replace_callback("/'(hostname|database|username|password|hostport|prefix)'(\s+)=>(\s+)env\((.*)\)\,/", $callback, $config);

        //檢測能否成功寫入數據庫配置
        $result = @file_put_contents($dbConfigFile, $config);
        if (!$result) {
            throw new Exception("無法寫入數據庫信息到config/database.php文件,請檢查是否有寫權限");
        }

        //檢測能否成功寫入lock文件
        $result = @file_put_contents($lockFile, 1);
        if (!$result) {
            throw new Exception("無法寫入安裝鎖定到app/install/install.lock文件,請檢查是否有寫權限");
        }

        $newSalt = substr(md5(uniqid(true)), 0, 6);
        $newPassword = md5(md5($adminPassword) . $newSalt);
        $pdo->query("UPDATE {$mysqlPrefix}admin SET username = '{$adminUsername}', email = '{$adminEmail}',password = '{$newPassword}', salt = '{$newSalt}' WHERE username = 'admin'");

        $adminName = '';
        if (is_file($adminFile)) {//修改后台入口文件名
            $x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $adminName = substr(str_shuffle(str_repeat($x, ceil(10 / strlen($x)))), 1, 10) . '.php';
            rename($adminFile, ROOT_PATH . 'public' . DS . $adminName);
        }
        echo "success|{$adminName}";
    } catch (PDOException $e) {
        $err = $e->getMessage();
    } catch (Exception $e) {
        $err = $e->getMessage();
    }
    echo $err;
    exit;
}
?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>安裝<?php echo $sitename; ?></title>
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1">
    <meta name="renderer" content="webkit">

    <style>
        body {
            background: #fff;
            margin: 0;
            padding: 0;
            line-height: 1.5;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
        }

        body, input, button {
            font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, 'Microsoft Yahei', Arial, sans-serif;
            font-size: 14px;
            color: #7E96B3;
        }

        .container {
            max-width: 480px;
            margin: 0 auto;
            padding: 20px;
            text-align: center;
        }

        a {
            color: #18bc9c;
            text-decoration: none;
        }

        a:hover {
            text-decoration: underline;
        }

        h1 {
            margin-top: 0;
            margin-bottom: 10px;
        }

        h2 {
            font-size: 28px;
            font-weight: normal;
            color: #3C5675;
            margin-bottom: 0;
            margin-top: 0;
        }

        form {
            margin-top: 40px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        .form-group .form-field:first-child input {
            border-top-left-radius: 4px;
            border-top-right-radius: 4px;
        }

        .form-group .form-field:last-child input {
            border-bottom-left-radius: 4px;
            border-bottom-right-radius: 4px;
        }

        .form-field input {
            background: #EDF2F7;
            margin: 0 0 1px;
            border: 2px solid transparent;
            transition: background 0.2s, border-color 0.2s, color 0.2s;
            width: 100%;
            padding: 15px 15px 15px 180px;
            box-sizing: border-box;
        }

        .form-field input:focus {
            border-color: #18bc9c;
            background: #fff;
            color: #444;
            outline: none;
        }

        .form-field label {
            float: left;
            width: 160px;
            text-align: right;
            margin-right: -160px;
            position: relative;
            margin-top: 18px;
            font-size: 14px;
            pointer-events: none;
            opacity: 0.7;
        }

        button, .btn {
            background: #3C5675;
            color: #fff;
            border: 0;
            font-weight: bold;
            border-radius: 4px;
            cursor: pointer;
            padding: 15px 30px;
            -webkit-appearance: none;
        }

        button[disabled] {
            opacity: 0.5;
        }

        .form-buttons {
            height: 52px;
            line-height: 52px;
        }

        .form-buttons .btn {
            margin-right: 5px;
        }

        #error, .error, #success, .success, #warmtips, .warmtips {
            background: #D83E3E;
            color: #fff;
            padding: 15px 20px;
            border-radius: 4px;
            margin-bottom: 20px;
        }

        #success {
            background: #3C5675;
        }

        #error a, .error a {
            color: white;
            text-decoration: underline;
        }

        #warmtips {
            background: #ffcdcd;
            font-size: 14px;
            color: #e74c3c;
        }

        #warmtips a {
            background: #ffffff7a;
            display: block;
            height: 30px;
            line-height: 30px;
            margin-top: 10px;
            color: #e21a1a;
            border-radius: 3px;
        }
    </style>
</head>

<body>
<div class="container">
    <h1>
        <svg width="80px" height="96px" viewBox="0 0 768 830" version="1.1" xmlns="http://www.w3.org/2000/svg"
             xmlns:xlink="http://www.w3.org/1999/xlink">
            <g id="logo" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
                <path d="M64.433651,605.899968 C20.067302,536.265612 0,469.698785 0,389.731348 C0,174.488668 171.922656,0 384,0 C596.077344,0 768,174.488668 768,389.731348 C768,469.698785 747.932698,536.265612 703.566349,605.899968 C614.4,753.480595 441.6,870.4 384,870.4 C326.4,870.4 153.6,753.480595 64.433651,605.899968 L64.433651,605.899968 Z"
                      id="body" fill="#18BC9C"></path>
                <path d="M429.648991,190.816 L430.160991,190.816 L429.648991,190.816 L429.648991,190.816 Z M429.648991,156 L427.088991,156 C419.408991,157.024 411.728991,160.608 404.560991,168.8 L403.024991,170.848 L206.928991,429.92 C198.736991,441.184 197.712991,453.984 204.368991,466.784 C210.512991,478.048 222.288991,485.728 235.600991,485.728 L336.464991,486.24 L304.208991,673.632 C301.648991,689.504 310.352991,705.376 325.200991,712.032 C329.808991,714.08 334.416991,714.592 339.536991,714.592 C349.776991,714.592 358.992991,709.472 366.160991,700.256 L561.744991,419.168 C569.936991,407.904 570.960991,395.104 564.304991,382.304 C557.648991,369.504 547.408991,363.36 533.072991,363.36 L432.208991,363.36 L463.952991,199.008 C464.464991,196.448 464.976991,193.376 464.976991,190.816 C464.976991,171.872 449.104991,156 431.184991,156 L429.648991,156 L429.648991,156 Z"
                      id="flash" fill="#FFFFFF"></path>
            </g>
        </svg>
    </h1>
    <h2>安裝 <?php echo $sitename; ?></h2>
    <div>

        <p>若你在安裝中遇到麻煩可點擊 <a href="<?php echo $link['doc']; ?>" target="_blank">安裝文檔</a> <a
                    href="<?php echo $link['forum']; ?>" target="_blank">問答社區</a> <a
                    href="<?php echo $link['qqun']; ?>">QQ交流群</a></p>
        <!--<p><?php echo $sitename; ?>還支持在命令行php think install一鍵安裝</p>-->

        <form method="post">
            <?php if ($errInfo): ?>
                <div class="error">
                    <?php echo $errInfo; ?>
                </div>
            <?php endif; ?>
            <div id="error" style="display:none"></div>
            <div id="success" style="display:none"></div>
            <div id="warmtips" style="display:none"></div>

            <div class="form-group">
                <div class="form-field">
                    <label>MySQL 數據庫地址</label>
                    <input type="text" name="mysqlHost" value="127.0.0.1" required="">
                </div>

                <div class="form-field">
                    <label>MySQL 數據庫名</label>
                    <input type="text" name="mysqlDatabase" value="tp6" required="">
                </div>

                <div class="form-field">
                    <label>MySQL 用戶名</label>
                    <input type="text" name="mysqlUsername" value="root" required="">
                </div>

                <div class="form-field">
                    <label>MySQL 密碼</label>
                    <input type="password" name="mysqlPassword">
                </div>

                <div class="form-field">
                    <label>MySQL 數據表前綴</label>
                    <input type="text" name="mysqlPrefix" value="fa_">
                </div>

                <div class="form-field">
                    <label>MySQL 端口號</label>
                    <input type="number" name="mysqlHostport" value="3306">
                </div>
            </div>

            <div class="form-group">
                <div class="form-field">
                    <label>管理者用戶名</label>
                    <input name="adminUsername" value="admin" required=""/>
                </div>

                <div class="form-field">
                    <label>管理者Email</label>
                    <input name="adminEmail" value="admin@admin.com" required="">
                </div>

                <div class="form-field">
                    <label>管理者密碼</label>
                    <input type="password" name="adminPassword" required="">
                </div>

                <div class="form-field">
                    <label>重復密碼</label>
                    <input type="password" name="adminPasswordConfirmation" required="">
                </div>
            </div>

            <div class="form-buttons">
                <button type="submit" <?php echo $errInfo ? 'disabled' : '' ?>>點擊安裝</button>
            </div>
        </form>

        <!-- jQuery -->
        <script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>

        <script>
            $(function () {
                $('form :input:first').select();

                $('form').on('submit', function (e) {
                    e.preventDefault();
                    var form = this;
                    var $button = $(this).find('button')
                        .text('安裝中...')
                        .prop('disabled', true);

                    $.post('', $(this).serialize())
                        .done(function (ret) {
                            if (ret.substr(0, 7) === 'success') {
                                var retArr = ret.split(/\|/);
                                $('#error').hide();
                                $(".form-group", form).remove();
                                $button.remove();
                                $("#success").text("安裝成功!開始你的<?php echo $sitename; ?>之旅吧!").show();

                                $buttons = $(".form-buttons", form);
                                $('<a class="btn" href="./">訪問首頁</a>').appendTo($buttons);

                                if (typeof retArr[1] !== 'undefined' && retArr[1] !== '') {
                                    var url = location.href.replace(/install\.php/, retArr[1]);
                                    $("#warmtips").html('溫馨提示:請將以下后台登錄入口添加到你的收藏夾,為了你的安全,不要泄漏或發送給他人!如有泄漏請及時修改!<a href="' + url + '">' + url + '</a>').show();
                                    $('<a class="btn" href="' + url + '" id="btn-admin" style="background:#18bc9c">訪問后台</a>').appendTo($buttons);
                                }
                                localStorage.setItem("fastep", "installed");
                            } else {
                                $('#error').show().text(ret);
                                $button.prop('disabled', false).text('點擊安裝');
                                $("html,body").animate({
                                    scrollTop: 0
                                }, 500);
                            }
                        })
                        .fail(function (data) {
                            $('#error').show().text('發生錯誤:\n\n' + data.responseText);
                            $button.prop('disabled', false).text('點擊安裝');
                            $("html,body").animate({
                                scrollTop: 0
                            }, 500);
                        });

                    return false;
                });
            });
        </script>
    </div>
</div>
</body>
</html>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM