回顧:php
上次介紹了 ThinkPHP 的 Index.PHP入口文件。但只是TP的入口前面的入口(刷boss老是要過好幾關才能讓你看到 ,否則boss都沒面子啊),從Index.PHP最後一行把咱們引路到了TP的大門前(ThinkPHP/ThinkPHP.php)html
// 引入ThinkPHP入口文件 require './ThinkPHP/ThinkPHP.php';
本次目標:ajax
查看TP的大門,同時稍微探索一下大門內部的東西thinkphp
正文:數據庫
先上代碼數組
1 // 記錄開始運行時間 2 $GLOBALS['_beginTime'] = microtime(TRUE); 3 // 記錄內存初始使用 4 define('MEMORY_LIMIT_ON',function_exists('memory_get_usage')); 5 if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage(); 6 7 // 版本信息 8 const THINK_VERSION = '3.2.3'; 9 10 // URL 模式定義 11 const URL_COMMON = 0; //普通模式 12 const URL_PATHINFO = 1; //PATHINFO模式 13 const URL_REWRITE = 2; //REWRITE模式 14 const URL_COMPAT = 3; // 兼容模式 15 16 // 類文件後綴 17 const EXT = '.class.php'; 18 19 // 系統常量定義 20 defined('THINK_PATH') or define('THINK_PATH', __DIR__.'/'); 21 defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'); 22 defined('APP_STATUS') or define('APP_STATUS', ''); // 應用狀態 加載對應的配置文件 23 defined('APP_DEBUG') or define('APP_DEBUG', false); // 是否調試模式 24 25 if(function_exists('saeAutoLoader')){// 自動識別SAE環境 26 defined('APP_MODE') or define('APP_MODE', 'sae'); 27 defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'Sae'); 28 }else{ 29 defined('APP_MODE') or define('APP_MODE', 'common'); // 應用模式 默認爲普通模式 30 defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'File'); // 存儲類型 默認爲File 31 } 32 33 defined('RUNTIME_PATH') or define('RUNTIME_PATH', APP_PATH.'Runtime/'); // 系統運行時目錄 34 defined('LIB_PATH') or define('LIB_PATH', realpath(THINK_PATH.'Library').'/'); // 系統核心類庫目錄 35 defined('CORE_PATH') or define('CORE_PATH', LIB_PATH.'Think/'); // Think類庫目錄 36 defined('BEHAVIOR_PATH')or define('BEHAVIOR_PATH', LIB_PATH.'Behavior/'); // 行爲類庫目錄 37 defined('MODE_PATH') or define('MODE_PATH', THINK_PATH.'Mode/'); // 系統應用模式目錄 38 defined('VENDOR_PATH') or define('VENDOR_PATH', LIB_PATH.'Vendor/'); // 第三方類庫目錄 39 defined('COMMON_PATH') or define('COMMON_PATH', APP_PATH.'Common/'); // 應用公共目錄 40 defined('CONF_PATH') or define('CONF_PATH', COMMON_PATH.'Conf/'); // 應用配置目錄 41 defined('LANG_PATH') or define('LANG_PATH', COMMON_PATH.'Lang/'); // 應用語言目錄 42 defined('HTML_PATH') or define('HTML_PATH', APP_PATH.'Html/'); // 應用靜態目錄 43 defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH.'Logs/'); // 應用日誌目錄 44 defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH.'Temp/'); // 應用緩存目錄 45 defined('DATA_PATH') or define('DATA_PATH', RUNTIME_PATH.'Data/'); // 應用數據目錄 46 defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH.'Cache/'); // 應用模板緩存目錄 47 defined('CONF_EXT') or define('CONF_EXT', '.php'); // 配置文件後綴 48 defined('CONF_PARSE') or define('CONF_PARSE', ''); // 配置文件解析方法 49 defined('ADDON_PATH') or define('ADDON_PATH', APP_PATH.'Addon'); 50 51 // 系統信息 52 if(version_compare(PHP_VERSION,'5.4.0','<')) { 53 ini_set('magic_quotes_runtime',0); 54 define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()? true : false); 55 }else{ 56 define('MAGIC_QUOTES_GPC',false); 57 } 58 define('IS_CGI',(0 === strpos(PHP_SAPI,'cgi') || false !== strpos(PHP_SAPI,'fcgi')) ? 1 : 0 ); 59 define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0 ); 60 define('IS_CLI',PHP_SAPI=='cli'? 1 : 0); 61 62 if(!IS_CLI) { 63 // 當前文件名 64 if(!defined('_PHP_FILE_')) { 65 if(IS_CGI) { 66 //CGI/FASTCGI模式下 67 $_temp = explode('.php',$_SERVER['PHP_SELF']); 68 define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/')); 69 }else { 70 define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/')); 71 } 72 } 73 if(!defined('__ROOT__')) { 74 $_root = rtrim(dirname(_PHP_FILE_),'/'); 75 define('__ROOT__', (($_root=='/' || $_root=='\\')?'':$_root)); 76 } 77 } 78 79 // 加載核心Think類 80 require CORE_PATH.'Think'.EXT; 81 // 應用初始化 82 Think\Think::start();
解釋:瀏覽器
1 - 5 行:初始化 運行的時間 內存之類的東東,給開發人員提供代碼運行效率直觀上的體現緩存
8 行:不猜也能知道 就是版本好的說明嘛服務器
11-14行:定義4個數據嘛,也就是瀏覽器地址的解析模式(等一下解釋)cookie
17 行:這裏不是看到是否是感受到 咱們若是加一個php時候的文件的後綴
20-49行:定義各類變量 可是下面的這段代碼 其中有一個函數 get_magic_quotes_gpc() 這個函數作什麼用 我大體查選了一下 大體說法 參考。TP裏面 能起到多大的做用 我也不是很清楚 若是誰知道 歡迎給你們說明一下
PHP解析器就會自動爲post、get、cookie過來的數據增長轉義字符「\」,以確保這些數據不會引發程序,特別是數據庫語句由於特殊字符引發的污染而出現致命的錯誤。
1 if(version_compare(PHP_VERSION,'5.4.0','<')) { 2 ini_set('magic_quotes_runtime',0); 3 define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()? true : false); 4 }else{ 5 define('MAGIC_QUOTES_GPC',false); 6 }
最後是加載核心Think類 和運行Think類中的start()這個方法
1 // 加載核心Think類 2 require CORE_PATH.'Think'.EXT; 3 // 應用初始化 4 Think\Think::start();
說明一下TP中的URL的幾個模式 資料
普通模式下
1 const URL_COMMON = 0; //普通模式
URL爲 http://localhost/?m=home&c=user&a=login&var=value
m參數表示模塊,c參數表示控制器,a參數表示操做(固然這些參數都是能夠配置的),後面的表示其餘GET參數。
'VAR_MODULE' => 'm', // 默認模塊獲取變量
'VAR_CONTROLLER' => 'c', // 默認控制器獲取變量
1 /* 系統變量名稱設置 */ 2 'VAR_MODULE' => 'm', // 默認模塊獲取變量 3 'VAR_ADDON' => 'addon', // 默認的插件控制器命名空間變量 4 'VAR_CONTROLLER' => 'c', // 默認控制器獲取變量 5 'VAR_ACTION' => 'a', // 默認操做獲取變量 6 'VAR_AJAX_SUBMIT' => 'ajax', // 默認的AJAX提交變量 7 'VAR_JSONP_HANDLER' => 'callback', 8 'VAR_PATHINFO' => 's', // 兼容模式PATHINFO獲取變量例如 ?s=/module/action/id/1 後面的參數取決於URL_PATHINFO_DEPR 9 'VAR_TEMPLATE' => 't', // 默認模板切換變量 10 'VAR_AUTO_STRING' => false, // 輸入變量是否自動強制轉換爲字符串 若是開啓則數組變量須要手動傳入變量修飾符獲取變量
PATHINFO模式
1 const URL_PATHINFO = 1; //PATHINFO模式 該模式是默認模式
URL: http://localhost/index.php/home/user/login/var/value/
PATHINFO地址的前三個參數分別表示模塊/控制器/操做。
說白了就是把普通模式下的幾個M C A 變量給省掉 使用斜槓來代替
好處:1.看上去很整齊 2.聽說能夠提升被搜索引擎抓住的概率哦!!!
固然是斜槓仍是別的是能夠設置的在 ThinkPHP\Conf\Convention.php 文件中能夠進行設置
1 'URL_PATHINFO_DEPR' => '/', // PATHINFO模式下,各參數之間的分割符號
REWRITE模式
1 const URL_REWRITE = 2; //REWRITE模式
官方的原話 : REWRITE模式是在PATHINFO模式的基礎上添加了重寫規則的支持,能夠去掉URL地址裏面的入口文件index.php,可是須要額外配置WEB服務器的重寫規則。
如何是這樣,那麼我以爲應該就是 瀏覽器地址給重寫之後在按照PATHINFO模式進行解析路由
兼容模式
1 const URL_COMPAT = 3; // 兼容模式
URL http://localhost/?s=/home/user/login/var/value
看到這個地址 YII的人有木有感受很熟悉
爲何是S開頭呢?是由於配置文件的設置 在 ThinkPHP\Conf\Convention.php
1 'VAR_PATHINFO' => 's', // 兼容模式PATHINFO獲取變量例如 ?s=/module/action/id/1 後面的參數取決於URL_PATHINFO_DEPR
修改模式方法
在配置文件 ThinkPHP\Conf\Convention.php
1 'URL_MODEL' => 1, // URL訪問模式,可選參數0、一、二、3,表明如下四種模式: 2 // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默認爲PATHINFO 模式
對於以上集中模式我的的小總結:
不論是那個 咱們把URL中出了模塊名稱開始前都去掉,就是不一樣的幾種取出模塊、控制器、控制器其中的方法名。因此在不配置路由和不使用默認的狀況下,咱們都能看到這三個參數。
總結:
ThinkPHP\ThinkPHP.php文件中 最主要的目的仍是定義好各類目錄的變量方便之後的調用
若是你發現代碼中有一個定義你不知道作什麼,若是是_path結尾(關於目錄的),就去ThinkPHP\ThinkPHP.php中找找,別的那麼就去ThinkPHP\Conf\Convention.php下找找 基本都能找到
幾個思考(我的在整理時候想到的):
1.定義IS_CGI ,IS_WIN,IS_CLI,MAGIC_QUOTES_GPC幹嗎用
1 // 系統信息 2 if(version_compare(PHP_VERSION,'5.4.0','<')) { 3 ini_set('magic_quotes_runtime',0); 4 define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()? true : false); 5 }else{ 6 define('MAGIC_QUOTES_GPC',false); 7 } 8 define('IS_CGI',(0 === strpos(PHP_SAPI,'cgi') || false !== strpos(PHP_SAPI,'fcgi')) ? 1 : 0 ); 9 define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0 ); 10 define('IS_CLI',PHP_SAPI=='cli'? 1 : 0);
2.爲何咱們剛下載的架構不須要輸入模塊、控制器、方法名也能正常跳出頁面。
好了,下一次咱們就拿上小米加步槍殺進TP大門
1 // 應用初始化 2 Think\Think::start();