$_SERVER是PHP中十分實用的超全局變量,在開發可移植的網站的時候會變得很有用。
下面我記錄一下我自己常用到的幾個變量
1.$_SERVER['SERVER_NAME']:記錄了網站的域名。
2.$_SERVER['DOCUMENT_ROOT']:網站的根目錄(就是在你系統下的絕對路徑,在windows都是例如是C://wamp/www之類的,linux例如是/var/www/html)。
3.$_SERVER['SERVER_ADDR']:記錄網站的IP地址
4.$_SERVER['REMOTE_ADDR']:記錄訪問者的IP地址
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/,改為http://www.domain.com/wordpress/
define('ABSURL', $_SERVER['REQUEST_SCHEME'].'://'.str_replace($_SERVER['DOCUMENT_ROOT'], $_SERVER['SERVER_NAME'], ABSPATH));