$_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));

  

记录PHP的超全局变量$_SERVER的更多相关文章

  1. PHP $_SERVER超全局变量

    $_SERVER是php中的超全局变量,一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建. ...

  2. PHP中的$_SERVER超全局变量

    详细参数 PHP编程中经常需要用到一些服务器的一些资料,特把$_SERVER的详细参数整理下,方便以后使用. $_SERVER['PHP_SELF'] #当前正在执行脚本的文件名,与 document ...

  3. PHP超全局变量

    PHP提供了九种超全局变量(数组) 1 $_GET //地址栏上获得的值 2 $_POST //POST表单发送的数据 3 $_REQUEST //GET和POST的内容全都有 4 $_SERVER ...

  4. PHP 中的超全局变量

    (1)$_GET[].一个包含所有PHP 从客户端浏览器接收的GET变量的数组. (2)$_POST[].一个包含所有PHP 从客户端浏览器接收的POST变量的数组. (3)$_COOKIE[].一个 ...

  5. php基础(三)超全局变量

    超全局变量 在 PHP 4.1.0 中引入,是在全部作用域中始终可用的内置变量. PHP 全局变量 - 超全局变量 PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可 ...

  6. 【二十三】php之预定义超全局变量

    php提供了九种预定义超全局变量: $_GET.$_POST.$_REQUEST.$_SERVER.$_ENV.$_FILE. $_COOKIE.$_SESSION. $GLOBALS 1.$_GET ...

  7. PHP全局变量,超全局变量

    php中有许多超全局变量,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. 这些超全局变量是: $GLOBALS    引用全局 ...

  8. PHP 5 全局变量 - 超全局变量

    PHP 全局变量 - 超全局变量 PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用.在函数或方法中无需执行 global $variable; 就可以访问它们. ...

  9. PHP之旅4 php 超全局变量

    预定义数组: 自动全局变量---超全局数组 1.包含了来自web服务器,客户端,运行环境和用户输入的数据 2.这些数组比较特别 3.全局范围内自动生效,都可以直接使用这些数组 4.用户不能自定义这些数 ...

随机推荐

  1. 严重: Exception sending context initialized event to listener instance of class

    问题描述:Exception sending context initialized event to listener instance of class org.springframework.w ...

  2. TypeScript之面向对象初体验

    1.安装nodejs和vscode: nodejs : https://nodejs.org/en/ Visual Studio Code :  https://www.visualstudio.co ...

  3. jasmine test 页面测试工具

    before((request, response) -> { response.header("Access-Control-Allow-Origin", "ht ...

  4. 深度剖析 | 基于大数据架构的BI应用

    说起互联网.电商的数据分析,更多的是谈应用案例,如何去实践数据化管理运营.而这里,我们要从技术角度分享关于数据的技术架构干货,如何应用BI. 原文是云猴网BI总经理王卫东在帆软大数据上的演讲,以下是整 ...

  5. Android 如何有效的解决内存泄漏的问题

    前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...

  6. 软件工程随笔(1)--jetbrain在软件工程中的应用

    接下来几天我要写半年的软件工程学习后的感想,今天从介绍IDE开始.首先,本人至今为止全部项目都是在mypclise上完成的.本人采用myeclipse唯一的原因就是它使用方便.但是,我也承认myecl ...

  7. Play Framework 项目遇到问题

    1.Debug调试出错,提示: Error occurred during initialization of VMagent library failed to init: jdwpERROR: C ...

  8. 前端页面卡顿?或是DOM操作惹的祸,需优化代码

    文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...

  9. Oracle工具类-生成数据库现有Job的创建脚本

    生成Oracle数据库现有Job的创建脚本 -- 生成现有Job的创建脚本 create or replace procedure proc_generate_job_create_sql is be ...

  10. backup log is terminating abnormally because for write on file failed: 112(error not found)

    昨天遇到一个案例,YourSQLDba做事务日志备份时失败,检查YourSQLDba输出的错误信息如下: <Exec> <ctx>yMaint.backups</ctx& ...