记录PHP的超全局变量$_SERVER
$_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));