1, $_SERVER['SCRIPT_FILENAME'] 和 常量 __FILE__的区别(一般情况下两者的显示相同,都是显示文件的绝对路径,包括文件名,显示的起点是 电脑根目录 /

  ①,如果在网站根目录下/var/www/创建一个软连接linkkk指向其他的文件夹~/work/test/,在linkkk下面建立a.php,打印$_SERVER,则这两者的显示就会有区别。

    SCRIPT_NAME的显示以网站根目录为准,不忽略软连接,显示结果为:'SCRIPT_FILENAME' =>string '/var/www/linkkk/a.php' (length=21)

    __FILE__的显示以服务器(即某台电脑)为准,忽略软连接,显示结果为:string '/home/ths/work/test/a.php' (length=34)

  ②,在include 或者require包含时,两者有区别。如b.php中包含a.php,在a.php中打印$_SERVER和__FILE__,然后访问b.php,则

    SCRIPT_NAME显示的是b.php所在的路径,即受到了包含文件的影响,而__FILE__显示的是a.php所在路径。

  总结一下:__FILE__显示的永远是 此文件相对于服务器的绝对路径(包含文件名),而且不受包含文件的影响!!

        而$_SERVER['SCRIPT_FILENAME']受到包含文件的影响,而且显示以网站根目录为准!

2, 关于$_SERVER['PATH_INFO']

    参考文章: http://www.111cn.net/phper/php-cy/62832.htm。

                  https://blogs.msdn.microsoft.com/david.wang/2005/08/05/what-is-path_translated/

          http://blog.csdn.net/bingqingsuimeng/article/details/20380329

  【自己测试】:只有在php文件后面加上/xxx/xxx才会打印出path_info信息,具体什么用,不太清楚。一个可能的用途是代替查询字符串?m=xxx&p=3,这样的查询网址显得不美观

  如网址是如下时:http://localhost/trash/c.php/ddd/dddddd?aa=3/a/aa,打印结果是 'PATH_INFO' =>string '/ddd/dddddd' (length=11)

3,'REQUEST_URI'  和   'SCRIPT_NAME' 和  'PHP_SELF' [这三者都受包含文件的影响,显示的起点是网站根目录]

PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 之间的区别

$_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 与 $_SERVER['REQUEST_URI'] 三者非常相似,返回的都是与当前 URL 或 PHP 程序文件相关的信息:

  1. $_SERVER['PHP_SELF']:相对于网站根目录的路径及 PHP 程序名称。
  2. $_SERVER['SCRIPT_NAME']:相对于网站根目录的路径及 PHP 程序文件名称。
  3. $_SERVER['REQUEST_URI']:访问此页面所需的 URI 。

一个简单的例子可以看出它们的区别。URL 地址如下:

http://www.5idev.com/php/index.php/test/foo?username=hbolive
  • $_SERVER['PHP_SELF'] 得到:/php/index.php/test/foo
  • $_SERVER['SCRIPT_NAME'] 得到:/php/index.php
  • $_SERVER['REQUEST_URI'] 得到:/php/index.php/test/foo?username=hbolive

从该例子可以看出:

  1. $_SERVER['PHP_SELF'] 则反映的是 PHP 程序本身;
  2. $_SERVER['SCRIPT_NAME'] 反映的是程序文件本身(这在页面需要指向自己时非常有用);
  3. $_SERVER['REQUEST_URI'] 则反映了完整 URL 地址(不包括主机名)。

其实从各自的命名上,也可以体现出它们之间的细微差别。

特别的,对于如下地址:

http://www.5idev.com/
  • $_SERVER['PHP_SELF'] 得到:/index.php
  • $_SERVER['SCRIPT_NAME'] 得到:/index.php
  • $_SERVER['REQUEST_URI'] 得到:/

至于有人提到 $_SERVER['PHP_SELF'] 与 $_SERVER['SCRIPT_NAME'] 在 PHP 以 CGI 模式运行下会有区别。由于 PHP 在 CGI 模式运行下并不多见,测试较为麻烦,在此就不再叙述了。如有这种情况,可注意并自行测试。

希望在理解了它们之间的区别之后,以便选择更适合自己程序的来使用。

  

php $_SERVER中的一些选项说明的更多相关文章

  1. OJ提交题目中的语言选项里G++与C++的区别(转)

    G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已. 那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C++都代表编译的方式. ...

  2. Bash中的shopt选项

    Bash中的shopt选项 http://blog.chinaunix.net/uid-20587169-id-1919110.html shopt命令用于显示和设置shell中的行为选项,通过这些选 ...

  3. 删除select中所有option选项jquery代码

    select中所有option选项如何删除,本文使用jquery简单实现下,有此需求的朋友可以参考下,希望对大家有所帮助. 这样写 复制代码代码如下: <select id="sear ...

  4. OJ提交题目中的语言选项里G++与C++的区别(转载)

    原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...

  5. makefile中一些编译器选项

    Libraries Static Libraries a collection of ordinary object files (目标文件的集合) loaded at program link ti ...

  6. Java-Selenium,获取下拉框中的每个选项的值,并随机选择某个选项

    今天逛51testing,看见有人问这个问题.现在以Select标签为例. 1.首先看页面中的下拉框,如图: 2.F12查看页面源代码,如下 <select class="form-c ...

  7. Linux: 介绍make menuconfig中的每个选项含义【转】

    转自:http://blog.csdn.net/gaoyuanlinkconcept/article/details/8810468 介绍make menuconfig中的每个选项含义 Linux 2 ...

  8. TCP协议中的SO_LINGER选项

    TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工 ...

  9. 【转】OJ提交题目中的语言选项里G++与C++的区别

    原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...

随机推荐

  1. #define宏重定义

    #define A 1 在同一个工程的另外一个文件里又定义了#define A 2 并不会报错(2010vs) 亲测可用 但是最后该宏变量A的值 ,应该是预处理-----顺序处理------最后一个运 ...

  2. iOS 打包方式

    https://www.cnblogs.com/wengzilin/p/4601684.html

  3. 数据库以及pymysql

    1.pymysql模块操作数据库详细 import pymysql # user = 'chun' # psw = conn = pymysql.connect(host='localhost',us ...

  4. spingmvc项目根路径访问不到

    问题: 如何改mvc中项目的欢迎页,或者叫做根路径 一个东西快弄完了,就剩下一个问题,应该是个小问题.就是mvc项目的欢迎页,怎么给改下呢 访问根路径http://localhost/demo 怎么都 ...

  5. js iterable类型

    遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于iterable类型. 具有iterabl ...

  6. andorid 菜单 进度条

    activity_ui2.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  7. spring boot (三): 热部署

    介绍了Spring boot实现热部署的两种方式,这两种方法分别是使用 Spring Loaded和使用spring-boot-devtools进行热部署. 热部署是什么 大家都知道在项目开发过程中, ...

  8. Java中关键字static的使用

    static 关键字 1).static只能修饰成员变量或成员方法,所有非静态是对象相关的,所有静态是类相关的. 2)被static修饰的成员变量成员方法独立于该类的任何对象,它不依赖类的特定的实例, ...

  9. java中 this 关键字的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  10. 域名ping不通,ip地址ping得通

    原因:dns服务器过期,需要更换dns服务器地址