php $_SERVER中的一些选项说明
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 程序文件相关的信息:
- $_SERVER['PHP_SELF']:相对于网站根目录的路径及 PHP 程序名称。
- $_SERVER['SCRIPT_NAME']:相对于网站根目录的路径及 PHP 程序文件名称。
- $_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
从该例子可以看出:
- $_SERVER['PHP_SELF'] 则反映的是 PHP 程序本身;
- $_SERVER['SCRIPT_NAME'] 反映的是程序文件本身(这在页面需要指向自己时非常有用);
- $_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中的一些选项说明的更多相关文章
- OJ提交题目中的语言选项里G++与C++的区别(转)
G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已. 那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C++都代表编译的方式. ...
- Bash中的shopt选项
Bash中的shopt选项 http://blog.chinaunix.net/uid-20587169-id-1919110.html shopt命令用于显示和设置shell中的行为选项,通过这些选 ...
- 删除select中所有option选项jquery代码
select中所有option选项如何删除,本文使用jquery简单实现下,有此需求的朋友可以参考下,希望对大家有所帮助. 这样写 复制代码代码如下: <select id="sear ...
- OJ提交题目中的语言选项里G++与C++的区别(转载)
原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...
- makefile中一些编译器选项
Libraries Static Libraries a collection of ordinary object files (目标文件的集合) loaded at program link ti ...
- Java-Selenium,获取下拉框中的每个选项的值,并随机选择某个选项
今天逛51testing,看见有人问这个问题.现在以Select标签为例. 1.首先看页面中的下拉框,如图: 2.F12查看页面源代码,如下 <select class="form-c ...
- Linux: 介绍make menuconfig中的每个选项含义【转】
转自:http://blog.csdn.net/gaoyuanlinkconcept/article/details/8810468 介绍make menuconfig中的每个选项含义 Linux 2 ...
- TCP协议中的SO_LINGER选项
TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工 ...
- 【转】OJ提交题目中的语言选项里G++与C++的区别
原文链接:http://blog.polossk.com/201405/c-plus-plus-g-plus-plus G++? 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编 ...
随机推荐
- TZOJ 1321 Girls and Boys(匈牙利最大独立集)
描述 the second year of the university somebody started a study on the romantic relations between the ...
- [剑指Offer]52-两个链表的第一个公共节点
题目链接 https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46?tpId=13&tqId=11189&t ...
- 细说SVN集中式版本控制器
svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具.在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行. 如 ...
- 实现Hibernate框架的CRUD
1.创建Web项目HS_test如图所示: 2.创建数据库DBHSTest,在数据库中创建表Teacher,并插入数据 3.在Myeclipse中调出DB Brower视图 右键->New: 连 ...
- 解决JFinal多文件上传时只获取到第一个文件名
我的思路: 用户生成时随即生成一串随机字符作为该用户的文件上传目录,并保存该字符串到用户的某一字段.需要显示上传的附件时,遍历这个文件夹.上传时可把文件名设置为上传时间. 1.生成上传路径 可写在注册 ...
- C#生成二维码(可保存二维码图片)
https://www.cnblogs.com/wlays/p/7994393.html 1.NuGet中搜索QRCoder,安装这个插件. 2.创建一个一般处理程序,代码: public void ...
- asp.net core webapi 似乎未安装在 IIS 中承载 .NET Core 项目所需的 AspNetCoreModule。请尝试修复 Visual Studio 以纠正该问题。
安装 DotNetCore.1.1.0-WindowsHosting 后,提示如题错误. 解决办法: ASP.NET Core 应用程序运行,可以选择 IIS Express 也可以选择 自己运行 , ...
- 学习knockoutjs轻量级的MVVM框架
教程:knockoutjs介绍 http://www.w3cfuns.com/forum.php?mod=viewthread&tid=5598714 MVVM架构~knockoutjs实现简 ...
- 9.26 H5日记
9.26 1.新的背景属性,background-position background-position有两个值,水平和垂直,单位px ❤在html和CSS当中,有三个属性可以向服务器发送请求,分别 ...
- Java并发-懒汉式单例设计模式加volatile的原因
懒汉式单例的double check.例一: class SingletonClass{ private static SingletonClass instance = null; private ...