国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

dedecms5.7(織夢)源碼解析之程序安裝補全篇

pkhope / 2576人閱讀

摘要:前言之前寫的織夢源碼解析之程序安裝一文中,還有幾個值得講解的文件沒有提到,這里說明一下。總結安裝文件,到此真的結束了。

前言

之前寫的《dedecms5.7(織夢)源碼解析之程序安裝》一文中,還有幾個值得講解的文件沒有提到,這里說明一下。

代碼 templates目錄

該文件夾中,一共有step-1.html、step-2.html、step-3.html、step-4.html、step-5.html五個文件,其作用主要為版權信息提示、系統環境檢測、數據庫和網站基本信息填寫、提交表單信息進入index.php文件處理、提示安裝成功等功能,可以說是引導用戶一步步安裝的頁面。

module-install.php文件

該文件主要作用為安裝模塊,具體作用請見如下代碼和注釋:

</>復制代碼

  1. 由于無法找到模塊緩存文件,安裝可選模塊失敗,請登錄后在模塊管理處安裝。

    ";
  2. $msg .= "點擊此完成安裝 >>";
  3. // 輸出出錯信息
  4. ShowMsg($msg,"javascript:;");
  5. exit();
  6. }
  7. //模塊文件夾權限
  8. if(!TestWrite($moduleDir))
  9. {
  10. // 如果沒有權限,則定義出錯信息和輸出出錯信息
  11. $msg = "目錄 {$moduleDir} 不支持寫入,不能安裝模塊,請登錄后在模塊管理處安裝。

    ";
  12. $msg .= "點擊此完成安裝 >>";
  13. ShowMsg($msg,"javascript:;");
  14. exit();
  15. }
  16. // 包含模塊緩存文件
  17. include($moduleCacheFile);
  18. // 按照逗號進行分割
  19. $modules = split(",",$selModule);
  20. // 統計數量
  21. $totalMod = count($modules);
  22. // 如果當前步驟大于數量
  23. if($step >= $totalMod)
  24. {
  25. // 則完成了所有安裝并且提示信息
  26. $msg = "完成所有模塊的安裝!

    ";
  27. $msg .= "點擊此進行下一步操作 >>";
  28. ShowMsg($msg,"javascript:;");
  29. exit();
  30. }
  31. // 模塊hash
  32. $moduleHash = $modules[$step];
  33. // 模塊文件
  34. $moduleFile = $allmodules[$moduleHash];
  35. // 實例化模塊類
  36. $dm = new DedeModule($moduleDir);
  37. // 獲得$moduleHash模塊的基本信息
  38. $minfos = $dm->GetModuleInfo($moduleHash);
  39. // 將數組中變量導入到當前符號表中
  40. extract($minfos, EXTR_SKIP);
  41. // 獲得系統文件的內容后進行轉義
  42. $menustring = addslashes($dm->GetSystemFile($moduleHash,"menustring"));
  43. // 構建插入語句
  44. $query = "INSERT INTO `#@__sys_module`(`hashcode` , `modname` , `indexname` , `indexurl` , `ismember` , `menustring` )
  45. VALUES ("$moduleHash" , "$name" , "$indexname" , "$indexurl" , "$ismember" , "$menustring" ) ";
  46. // 執行刪除語句
  47. $rs = $dsql->ExecuteNoneQuery("Delete From `#@__sys_module` where hashcode like "$moduleHash" ");
  48. // 執行上方插入語句
  49. $rs = $dsql->ExecuteNoneQuery($query);
  50. // 如果執行失敗
  51. if(!$rs)
  52. {
  53. // 提示并輸出錯誤信息
  54. $msg = "保存數據庫信息失敗,無法完成你選擇的模塊安裝!

    ";
  55. $msg .= "點擊此進行下一步操作 >>";
  56. exit();
  57. }
  58. //寫文件
  59. $dm->WriteFiles($moduleHash,1);
  60. // 寫系統文件
  61. $dm->WriteSystemFile($moduleHash,"readme");
  62. // 獲得系統文件
  63. $setupsql = $dm->GetSystemFile($moduleHash,"setupsql40");
  64. //運行SQL
  65. $mysql_version = $dsql->GetVersion(TRUE);
  66. $setupsql = preg_replace("#ENGINE=MyISAM#i", "TYPE=MyISAM", $setupsql);
  67. $sql41tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language;
  68. // 如果版本大于4.1,則執行此中替換
  69. if($mysql_version >= 4.1) {
  70. $setupsql = preg_replace("#TYPE=MyISAM#i", $sql41tmp, $setupsql);
  71. }
  72. //_ROOTURL_ 定義根目錄
  73. if($cfg_cmspath=="/") $cfg_cmspath = "";
  74. // 定義根目錄路徑url
  75. $rooturl = $cfg_basehost.$cfg_cmspath;
  76. // 將預定義的字符替換成根目錄url
  77. $setupsql = preg_replace("#_ROOTURL_#i", $rooturl, $setupsql);
  78. // 替換換行符
  79. $setupsql = preg_replace("#[
  80. ]{1,}#", "
  81. ", $setupsql);
  82. // 按照;進行分割
  83. $sqls = preg_split("#;[
  84. ]{0,}
  85. #", $setupsql);
  86. // 遍歷進行執行
  87. foreach($sqls as $sql) {
  88. if(trim($sql)!="") $dsql->executenonequery($sql);
  89. }
  90. // 清理
  91. $dm->Clear();
  92. // 步驟+1,(方便執行下一步)
  93. $step = $step + 1;
  94. // 提示信息
  95. ShowMsg("模塊 {$name} 安裝完成,準備下一模塊安裝...", "module-install.php?step={$step}");
  96. exit();
module_autos.php文件

該文件在步驟5(安裝完成)頁面會以iframe的形式展示給用戶,當然,在用戶看來,是step-5.html頁面中,它的作用主要是提示用戶訪問頁面和自動安裝暢言模塊,請看下面代碼和注釋:

</>復制代碼

  1. 訪問網站首頁
  2. 登錄網站后臺
  3. EOT;
  4. exit();
  5. }
  6. // 初始化暢言模塊信息
  7. $module_autos=array(
  8. "606c658db048ea7328ffe1c7ae2a732f"=>array(
  9. "name"=>"changyan_autoreg",
  10. "title"=>"暢言模塊"
  11. )
  12. );
  13. $logs = "";
  14. foreach($module_autos as $hh=>$module_auto)
  15. {
  16. // 判斷當前鍵是否在modules中,如果不存在,則直接跳過
  17. if(!in_array($hh, $modules)) continue;
  18. // 包含安裝暢言文件的路徑
  19. $autofile = dirname(__FILE__)."/module_autos/".$module_auto["name"].".php";
  20. // 檢測存在,則包含
  21. if(file_exists($autofile)) require_once($autofile);
  22. // 否則跳過
  23. else continue;
  24. // 將$module_auto["name"]第一個字母轉大寫,方便下面創建實例
  25. $clsname = ucfirst($module_auto["name"]);
  26. // 創建實例
  27. $macls = new $clsname();
  28. // 如果執行失敗,則提示出錯
  29. if(!$macls->run()) $logs .= "初始化{$module_auto["title"]}出錯:".$macls->errmsg."
    ";
  30. // 否則提示成功
  31. else $logs .= "成功初始化{$module_auto["title"]}
    ";
  32. }
  33. // 以寫入的方式打開文件鎖文件
  34. $fp = fopen($insLockfile,"w");
  35. // 寫入ok
  36. fwrite($fp,"ok");
  37. fclose($fp);
  38. // 刪除模塊臨時配置文件
  39. @unlink("./modules.tmp.inc");
  40. // 輸出提示信息
  41. echo <<
  42. 訪問網站首頁
  43. 登錄網站后臺
  44. EOT;
  45. ?>
module_autos/changyan_autoreg.php文件

該文件主要作用為安裝暢言插件類文件,在install/module.autos.php文件中有引用和創建實例,請看下面代碼和注釋:

</>復制代碼

  1. errmsg = "未成功安裝暢言模塊文件";
  2. return FALSE;
  3. }
  4. // 載入助手
  5. helper("changyan");
  6. // 檢測是否存在plus_changyan_setting數據表
  7. if( !$dsql->IsTable("#@__plus_changyan_setting") )
  8. {
  9. $this->errmsg = "未成功初始化暢言模塊所需數據庫";
  10. return FALSE;
  11. }
  12. // 定義版本信息
  13. if (empty($version)) $version = "0.0.1";
  14. // 比較版本
  15. if (version_compare($version, CHANGYAN_VER, "<")) {
  16. // 獲得MySql的版本號
  17. $mysql_version = $dsql->GetVersion(TRUE);
  18. // 遍歷更新sql語句
  19. foreach ($update_sqls as $ver => $sqls) {
  20. // 如果小于指定版本,則跳過
  21. if (version_compare($ver, $version,"<")) {
  22. continue;
  23. }
  24. // 遍歷執行
  25. foreach ($sqls as $sql) {
  26. // 替換預定義字符串
  27. $sql = preg_replace("#ENGINE=MyISAM#i", "TYPE=MyISAM", $sql);
  28. $sql41tmp = "ENGINE=MyISAM DEFAULT CHARSET=".$cfg_db_language;
  29. // mysql版本小于4.1的操作
  30. if($mysql_version >= 4.1)
  31. {
  32. $sql = preg_replace("#TYPE=MyISAM#i", $sql41tmp, $sql);
  33. }
  34. // 執行sql語句,不返回結果
  35. $dsql->ExecuteNoneQuery($sql);
  36. }
  37. // 設置版本
  38. changyan_set_setting("version", $ver);
  39. $version=changyan_get_setting("version");
  40. }
  41. // 獲取key
  42. $isv_app_key = changyan_get_isv_app_key();
  43. }
  44. // 獲取用戶
  45. $db_user = changyan_get_setting("user");
  46. if(!empty($db_user))
  47. {
  48. $this->errmsg = "已經初始化暢言賬號,無需再進行初始化";
  49. return FALSE;
  50. }
  51. /**
  52. * 按照api規則發送消息到暢言
  53. */
  54. $sign=changyan_gen_sign(CHANGYAN_CLIENT_ID);
  55. $url = $_SERVER["SERVER_NAME"];
  56. $isv_name = cn_substr($cfg_webname,20);
  57. $paramsArr=array(
  58. "client_id"=>CHANGYAN_CLIENT_ID,
  59. "isv_name"=>changyan_autoCharset($isv_name),
  60. "url"=>"http://".$url,
  61. "sign"=>$sign);
  62. $rs=changyan_http_send(CHANGYAN_API_AUTOREG,0,$paramsArr);
  63. $result=json_decode($rs,TRUE);
  64. /**
  65. * 接收返回結果,并儲存
  66. */
  67. if($result["status"]==0)
  68. {
  69. // 保存appid,id信息
  70. changyan_set_setting("user", $result["user"]);
  71. changyan_set_setting("appid", $result["appid"]);
  72. changyan_set_setting("id", $result["id"]);
  73. changyan_set_setting("isv_app_key", $result["isv_app_key"]);
  74. changyan_set_setting("isv_id", $result["isv_id"]);
  75. changyan_clearcache();
  76. $passwd = changyan_mchStrCode($result["passwd"], "ENCODE");
  77. changyan_set_setting("pwd", $passwd);
  78. return TRUE;
  79. } else {
  80. if($step > 3)
  81. {
  82. $this->errmsg = "無法成功初始化暢言模塊";
  83. return FALSE;
  84. }
  85. $step++;
  86. return $this->run($step);
  87. }
  88. }
  89. }
  90. ?>
其他文件

其他諸如*.inc.php都是配置文件,cache.php都是緩存文件,還要就是.css和.js的樣式腳本文件了,都沒什么好說的。

總結

安裝文件,到此真的結束了。簡單來說,就是預定義-》替換-》獲取-》儲存。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22079.html

相關文章

  • dedecms5.7(織夢)源碼解析程序安裝

    摘要:前言眾所周知,在第一次運行時會檢測是否安裝,如果沒有,則自動跳轉到安裝界面,進行用戶友好的安裝步驟,下面我們就來從源碼看看這一切是如何完成的。總結安裝的話,到此結束了,基本都是接收表單參數,操作文件和數據庫的東西。 前言 眾所周知,dedecms在第一次運行時會檢測是否安裝,如果沒有,則自動跳轉到安裝界面,進行用戶友好的安裝步驟,下面我們就來從源碼看看這一切是如何完成的。 代碼 默認服...

    olle 評論0 收藏0
  • dedecms5.7(織夢)源碼解析后臺登錄

    摘要:前言在安裝完成之后,我們通常會進入后臺,那么登錄自然是必不可少的一步,下面我們就來看看,織夢的登錄在源碼中是究竟如何完成的吧。 前言 在安裝完成之后,我們通常會進入后臺,那么登錄自然是必不可少的一步,下面我們就來看看,織夢的登錄在源碼中是究竟如何完成的吧。 過程 首先,如果我們直接訪問域名/dede,那么程序走的肯定是index.php,文件源碼如下:

    calx 評論0 收藏0
  • 程序人生:dedecms偽靜態的實現方法

    摘要:一般來說,空間都是支持偽靜態的。服務器偽靜態相對簡單,直接在文件中加入相應偽靜態規則即可而服務器偽靜態的實現,則需要加載組件,然后配置文件。 操作如下:1、后臺-系統參數-核心設置-是否使用偽靜態:選擇是;注:你的網站空間是否支持偽靜態,你可以與空間的IDC商聯系一 下,如果是自己的服務器,那就更好辦了,自己動手,豐衣足食。一般來說,空間都是支持偽靜態的。Apache服務器偽靜態相對簡...

    mingde 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<