$_server是php中十分實用的超全域性變數,在開發可移植的**的時候會變得很有用。
下面我記錄一下我自己常用到的幾個變數
2.$_server['document_root']:**的根目錄(就是在你系統下的絕對路徑,在windows都是例如是c://wamp/www之類的,linux例如是/var/www/html)。
5.$_server['script_filename']:訪問的檔案的路徑
6.$_server['request_scheme']:訪問的檔案的方式,常見為http
一般而言,在建站的時候,都會採用單一入口(多見為從index.php)的形式,在我看來,單一入口的好處有下面兩點:
1.後面的程式可以統一處理,比如說要開發時候用到某個第三方類庫,只需要在入口檔案引入,其餘的程式都會可以引用
2.路徑可以統一處理。因為都是從index.php開始,所以引入檔案只要相對於index.php的路徑即可。
個人曾經二次開發過discuz和wordpress,發現他們都有共同點就是都會在剛剛初始化的時候就定義乙個變數儲存資料夾的絕對路徑,這樣在以後引入其他檔案的時候就會很方便,而且也有移植性。
關於**根目錄,舉個栗子
discuz在source/class/class_core.php定義了站點的根目錄discuz_root,
它是這樣定義的:
define('discuz_root', substr(dirname(__file__), 0, -12));
__file__代表當前檔案的路徑,dirname(__file__)代表獲取當前檔案的根目錄,substr(dirname(__file__), 0, -12)表示擷取前面字元,不要最後12個,剛剛好也就是source/class這個12個字元。我的**是/var/www/html/discuz/source/class/class_core.php,經過這麼一處理,discuz站點根目錄就得出是/var/www/html/discuz/,看上去複雜其實自己推算一下還是很容易得出的。
wordpress在wp-configs裡定義站點根目錄abspath。
直接更方便:
define('abspath', dirname(__file__) . '/');
而為了方便前端網頁開發,我還會手癢定義乙個網域名稱絕對路徑,何為網域名稱絕對路徑呢?就是拿wordpress來說吧,例如http://localhost/wordpress/index.php/2016/10/31/001.html這個頁面,那麼他的網域名稱絕對根目錄就是http://localhost/wordpress/,以後引入的時候只需要相對在wordpress的根目錄下引入就好了,以後移植到其他伺服器,就不會影響了,因為這個網域名稱絕對路徑是在程式執行的時候就定義好的。這個網域名稱根目錄是在上面的站點根目錄去改進的。
只需要把**的根目錄改為網域名稱,其他部分一樣,開頭加個請求方式就完美了。
例:站點根目錄為/var/www/html/wordpress/,改為
define('absurl', $_server['request_scheme'].'://'.str_replace($_server['document_root'], $_server['server_name'], abspath));
PHP 超全域性變數
globals 包含乙個引用指向每個當前指令碼的全域性範圍內有效的變數。該陣列的鍵名為全域性變數的名稱。從 php 3 開始存在 globals 陣列。server 變數由 web 伺服器設定或者直接與當前指令碼的執行環境相關聯。類似於舊陣列 http server vars 陣列 依然有效,但反對...
PHP超全域性變數
php 4.2.0以及後續版本中,php指令register globals的預設off.this是乙個重大的改變php.let register globals的關閉會影響到預定義變數的例子,在全球範圍內的validity.for設定,以獲得document root的值,將必須使用 server...
php超全域性變數
globals get post get post form表單中通過get或者post傳遞進來的引數都會儲存在這兩個陣列中,我們可以通過鍵來獲取使用者提交的資訊。然後做進一步處理。注 form表單裡面使用者提交的資訊一定要記得給name值。input type text password radi...