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. Delphi: 圆形进度(环形进度)

    起源: 重回DC5项目,资源下载美工提供圆形进度条,复习Delphi,为实现其颇觉有趣,遂研究其. 最终效果图如下: 实现: 制作TCircleProgress控件,实现方法参照系统之TGauge控件 ...

  2. xml转Map,对象,Map转xml,inputs tram 转xml 字符串的工具类方法

    众所周知,大家在微信开发工程中,由于微信开发文档中,对于消息的接收发送都是基础xml数据的(太坑了),所以我们需要对XML进行解析转换: 1.我们先引入所需要的依赖 dom4j (解析xml的),xs ...

  3. SQL update语句 更新和查询同一张表 冲突

    #update 和 select在同一张表的时候会显示冲突  报错信息: [Err] 1093 - You can't specify target table 'tb_a' for update i ...

  4. Web.config Transformation Syntax for Web Application Project Deployment

    Web.config Transformation Syntax for Web Application Project Deployment Other Versions   Updated: Ma ...

  5. Windows 获取unix timestamp

    #include <stdio.h> #include <time.h> int main(){ SYSTEMTIME lpSysTime; GetLocalTime(& ...

  6. js中被调用的函数获取调用者对象

    通过event.srcElement即可.一直用了很久的传参,终于解决了.

  7. slam14讲证明构成李代数

  8. 使用limma、Glimma和edgeR,RNA-seq数据分析易如反掌

    使用limma.Glimma和edgeR,RNA-seq数据分析易如反掌 Charity Law1, Monther Alhamdoosh2, Shian Su3, Xueyi Dong3, Luyi ...

  9. Linux快速安装apache+mysql+php环境

    yum -y install httpd mysql mysql-server php php-mysql postgresql postgresql-server php-postgresql ph ...

  10. 性能监控工具——Cacti安装文档

    一.Cacti安装说明 1.安装说明 一般性的安装说明,详细的操作系统具体的安装说明可用于Linux. 2.服务器安装要求 RRDTool 1.2.x或更高版本 MySQL 4.1.x或5.x更高版本 ...