PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(二)
三、 安裝(install/index.php)
這個(gè)文件是安裝頁(yè)面,一開(kāi)始就可以看到定義了兩個(gè)常量:
define('INSIDE' , true);
define('INSTALL' , true);
因?yàn)檫@兩個(gè)常量在接下來(lái)的代碼中總是用到,所以在這里先說(shuō)明下。INSIDE是用來(lái)防止攻擊的;INSTALL是用來(lái)記錄現(xiàn)在是否處于安裝游戲的進(jìn)程中。
接下來(lái)Include兩個(gè)文件:extension.inc和common,這兩個(gè)都是正宗的php文件。首先extension.inc里面加入了防止攻擊的代碼,并且把php文件的擴(kuò)展名隱藏起來(lái),就是這句$phpEx = “php”。那么'common.'.$phpEx其實(shí)就是common.php了。
includeLang('install/install');
這句是load語(yǔ)言文件,includeLang()函數(shù)聲明在includes/unlocalised.php文件中,這個(gè)文件中還有很多的小函數(shù)。
function includeLang ($filename, $ext = '.mo') {
global $xnova_root_path, $lang, $user;
if ($user['lang'] != '') {
$SelLanguage = $user['lang'];
} else {
$SelLanguage = DEFAULT_LANG;
}
include ($xnova_root_path . "language/". $SelLanguage ."/". $filename.$ext);
}
函數(shù)的功能是個(gè)根據(jù)用戶(hù)的所用的語(yǔ)種 include 相應(yīng)的代碼,XnovaTC3版本里面是支持每個(gè)用戶(hù)使用不同的語(yǔ)言的,我使用的版本無(wú)此功能。
繼續(xù)往下,取得當(dāng)前要顯示的頁(yè)面內(nèi)容,就是到了安裝步驟幾了;然后進(jìn)入一個(gè)大的switch。在這之前有一個(gè)這樣的語(yǔ)句:
$MainTPL = gettemplate('install/ins_body');
Gettemplate()函數(shù)同樣聲明在includes/unlocalised.php文件中,
function gettemplate ($templatename) {
global $xnova_root_path;
$filename = $xnova_root_path . TEMPLATE_DIR . TEMPLATE_NAME . '/' . $templatename . ".tpl";
return ReadFromFile($filename);
}
函數(shù)的功能是取得一個(gè)指定文件的內(nèi)容,這個(gè)指定的文件是這樣構(gòu)成的:
$ugamela_root_path . TEMPLATE_DIR . TEMPLATE_NAME . '/' . $templatename . ".tpl";
TEMPLATE_DIR的值是'templates/',TEMPLATE_NAME的值是'OpenGame',那么前面的 gettemplate
('install/ins_body')就是取得templates/OpenGame/install/ins_body.tpl文件中的內(nèi)容。這樣的函數(shù)還有幾個(gè),大家都要記住,后面會(huì)經(jīng)常用到。
case ‘intro':
一看就應(yīng)該知道,是說(shuō)明介紹的頁(yè)面,不過(guò)里面有個(gè)我們首次見(jiàn)到的函數(shù)parsetemplate(),聲明在includes/unlocalised.php文件中,
function parsetemplate ($template, $array) {
return preg_replace('#\{([a-z0-9\-_]*?)\}#Ssie', '( ( isset($array[\'\1\']) ) ? $array[\'\1\'] : \'\' );', $template);
}
函數(shù)的功能是利用正則表達(dá)式,對(duì)$template中的特定字符串(就是由 {} 括起來(lái)的內(nèi)容),用$array的值進(jìn)行替換,來(lái)實(shí)現(xiàn)多語(yǔ)言功能。
case ‘ins':
這個(gè)分枝是具體安裝過(guò)程,分成4個(gè)步驟頁(yè)面,由$page變量控制顯示哪一個(gè)頁(yè)面。
1. 當(dāng)$page值為1時(shí),先進(jìn)行一些錯(cuò)誤判斷;如果沒(méi)有錯(cuò)誤,就讀取 templates/install/ins_form.tpl模板,parse出并構(gòu)成有服務(wù)器地址、數(shù)據(jù)庫(kù)名、表名前綴、用戶(hù)名和密碼的頁(yè)面。安裝者輸入數(shù)據(jù)后,點(diǎn)擊install進(jìn)入下一步的流程。
2. 當(dāng)$page值為2時(shí),取得第一步輸入的數(shù)據(jù),并嘗試連接數(shù)據(jù)庫(kù);如果連接不上數(shù)據(jù)庫(kù)則提示錯(cuò)誤;連上數(shù)據(jù)庫(kù)則繼續(xù)后續(xù)的過(guò)程,包括:在config.php文件中寫(xiě)入數(shù)據(jù)庫(kù)連接信息;根據(jù)includes/databaseinfos.php文件內(nèi)容創(chuàng)建表結(jié)構(gòu)。
3. 當(dāng)$page值為3時(shí),判斷上一步是否發(fā)生錯(cuò)誤,沒(méi)有發(fā)生則顯示一些信息并parse出創(chuàng)建管理員帳號(hào)的表單,進(jìn)入下一個(gè)流程。
4. 當(dāng)$page值為4時(shí),取得上一步輸入的數(shù)據(jù),有帳號(hào)、密碼、email等;一些判斷之后創(chuàng)建這個(gè)管理員帳號(hào),創(chuàng)建的過(guò)程以后注冊(cè)的時(shí)候再詳細(xì)說(shuō)明。
至此,安裝主要過(guò)程就結(jié)束了,主要步驟就是這些,代碼也不難理解。最后還有一個(gè)函數(shù)要講解下,就是display(),聲明在includes/function.php文件中,
function display ($page, $title = '', $topnav = true, $metatags = '', $AdminPage = false) {
global $link, $game_config, $debug, $user, $planetrow;
if (!$AdminPage) {
$DisplayPage = StdUserHeader ($title, $metatags);
} else {
$DisplayPage = AdminUserHeader ($title, $metatags);
}
if ($topnav) {
$DisplayPage .= ShowTopNavigationBar( $user, $planetrow );
}
$DisplayPage .= "<center>\n". $page ."\n</center>\n";
// Affichage du Debug si necessaire
if ($user['authlevel'] == 1 || $user['authlevel'] == 3) {
if ($game_config['debug'] == 1) $debug->echo_log();
}
$DisplayPage .= StdFooter();
if (isset($link)) {
@mysql_close($link);
}
echo $DisplayPage;
die();
}
函數(shù)的功能是顯示普通用戶(hù)頁(yè)眉和管理員頁(yè)眉的區(qū)分,是否顯示頂部的信息欄等,此函數(shù)中還調(diào)用了其他函數(shù),如:StdUserHeader()、AdminUserHeader()、ShowTopNavigationBar()和 StdFooter()都不復(fù)雜,其實(shí)現(xiàn)都是前面介紹過(guò)的 parsetempalte()和gettemplate(),這里就不詳細(xì)說(shuō)明了。
- php實(shí)現(xiàn)貪吃蛇小游戲
- php猜單詞游戲
- php實(shí)現(xiàn)的簡(jiǎn)易掃雷游戲?qū)嵗?/a>
- PHP實(shí)現(xiàn)扎金花游戲之大小比賽的方法
- jQuery+PHP實(shí)現(xiàn)的擲色子抽獎(jiǎng)游戲?qū)嵗?/a>
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(一)
- php數(shù)字游戲 計(jì)算24算法
- PHP游戲編程25個(gè)腳本代碼
- php 網(wǎng)頁(yè)游戲開(kāi)發(fā)入門(mén)教程一(webgame+design)
- PHP 編寫(xiě)的 25個(gè)游戲腳本
- php實(shí)現(xiàn)的網(wǎng)頁(yè)版剪刀石頭布游戲示例
相關(guān)文章
本篇文章是一篇關(guān)于PHP使用ActiveMQ的實(shí)例,我們分享了實(shí)例代碼,并做了相關(guān)要點(diǎn)的解釋?zhuān)枰呐笥褏⒖枷掳伞?/div> 2018-02-02
php上傳apk后自動(dòng)提取apk包信息的使用(示例下載)
本篇文章介紹了,php上傳apk后自動(dòng)提取apk包信息的使用(示例下載)需要的朋友參考下2013-04-04
PHP中通過(guò)exec調(diào)用python腳本報(bào)ModuleNotFoundError錯(cuò)誤問(wèn)題及解決方法
這篇文章主要介紹了解決php中通過(guò)exec調(diào)用python腳本報(bào)ModuleNotFoundError錯(cuò)誤,本文是在 Ubuntu 20.04 上以 ubuntu 用戶(hù)身份進(jìn)行的測(cè)試,需要的朋友可以參考下2023-07-07
WordPress上傳圖片錯(cuò)誤:不是合法的JSON響應(yīng)解決辦法
這篇文章主要給大家介紹了關(guān)于WordPress上傳圖片錯(cuò)誤:不是合法的JSON響應(yīng)的解決辦法,WordPress提示JSON錯(cuò)誤通常是由于服務(wù)器配置或插件沖突引起的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
php數(shù)組轉(zhuǎn)換js數(shù)組操作及json_encode的用法詳解
php數(shù)組轉(zhuǎn)換js數(shù)組操作及json_encode的用法。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-10-10
Yii輸入正確驗(yàn)證碼卻驗(yàn)證失敗的解決方法
這篇文章主要給大家介紹了Yii輸入正確驗(yàn)證碼卻驗(yàn)證失敗的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06最新評(píng)論

