您的位置:首页 > 产品设计 > UI/UE

$_SERVER['PHP_SELF']和$_SERVER['SCRIPT_NAME']和$_SERVER["QUERY_STRING"],$_SERVER["REQUEST_URI"]

2014-07-24 09:46 836 查看
$_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使用的页面地址有关的信息,这里列出一些相关的例子,帮助确定哪些是在你的脚本最适合的。

$_SERVER[’PHP_SELF’]
http://www.yoursite.com/example/ — – — /example/index.php http://www.yoursite.com/example/index.php — – — /example/index.php http://www.yoursite.com/example/index.php?a=test — – — /example/index.php http://www.yoursite.com/example/index.php/dir/test — – — /dir/test

当我们使用$_SERVER['PHP_SELF']的时候,无论访问的URL地址是否有index.php,它都会自动的返回 index.php.但是如果在文件名后面再加斜线的话,就会把后面所有的内容都返回在$_SERVER['PHP_SELF']。

$_SERVER['REQUEST_URI']
http://www.yoursite.com/example/ — – — / http://www.yoursite.com/example/index.php — – — /example/index.php http://www.yoursite.com/example/index.php?a=test — – — /example/index.php?a=test http://www.yoursite.com/example/index.php/dir/test — – — /example/index.php/dir/test

$_SERVER['REQUEST_URI']返回的是我们在URL里写的精确的地址,如果URL只写到”/”,就返回 “/”

$_SERVER['SCRIPT_NAME']
http://www.yoursite.com/example/ — – — /example/index.php http://www.yoursite.com/example/index.php — – — /example/index.php http://www.yoursite.com/example/index.php — – — /example/index.php http://www.yoursite.com/example/index.php/dir/test — – — /example/index.php

在所有的返回中都是当前的文件名/example/index.php

==============================================================================================

在写程序的过程中经常会用到$_SERVER函数,有时候对变量不太了解就会造成很大的误解。今天偶找了几个小例子来说明一下常用到的四个变量的用法~~

$_SERVER存储当前服务器信息,其中有几个值如

$_SERVER["QUERY_STRING"],

$_SERVER["REQUEST_URI"],

$_SERVER["SCRIPT_NAME"],

$_SERVER["PHP_SELF"]

常常容易混淆,以下通过实例详解$_SERVER函数中QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF变量区别,掌握这四者之间的关系,便于在实际应用中正确获取所需要的值,供参考。

1,$_SERVER["QUERY_STRING"]

说明:查询(query)的字符串

2,$_SERVER["REQUEST_URI"]

说明:访问此页面所需的URI

3,$_SERVER["SCRIPT_NAME"]

说明:包含当前脚本的路径

4,$_SERVER["PHP_SELF"]

说明:当前正在执行脚本的文件名

实例:

1,http://ask.mbatrip.com (打开主页)

结果:

$_SERVER["QUERY_STRING"] =“”

$_SERVER["REQUEST_URI"] =“/”

$_SERVER["SCRIPT_NAME"] =“/index.php”

$_SERVER["PHP_SELF"] =“/index.php”

2,http://ask.mbatrip.com/?tags/上传(附带查询)

结果:

$_SERVER["QUERY_STRING"] =“tags/上传″

$_SERVER["REQUEST_URI"] =“/?tags/上传″

$_SERVER["SCRIPT_NAME"] =“/index.php”

$_SERVER["PHP_SELF"] =“/index.php”

3,http://ask.mbatrip.com/?tags/上传/2

结果:

$_SERVER["QUERY_STRING"] =“tags/上传/2”

$_SERVER["REQUEST_URI"] =“/index.php?tags/上传/2”

$_SERVER["SCRIPT_NAME"] =“/index.php”

$_SERVER["PHP_SELF"] =“/index.php”

$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值

$_SERVER["REQUEST_URI"] 获取http://ask.mbatrip.com后面的值,包括/

$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php

$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名

总结一下,对于QUERY_STRING,REQUEST_URI,SCRIPT_NAME 和PHP_SELF,深入了解将有利于我们在$_SERVER函数中正确调用这四个值。通过实例详解$_SERVER函数中 QUERY_STRING,REQUEST_URI,SCRIPT_NAME和PHP_SELF掌握四个变量之间的区别。

======================================================================================================

一般情况下两者打印出来的东西基本一样的,但是如果你输入

/test.php/123456的话

$_SERVER['PHP_SELF']结果是/test.php/123456

而$_SERVER['SCRIPT_NAME']结果是/test.php

所以为了安全起见,为了指向自身,应该用$_SERVER['SCRIPT_NAME']而不是$_SERVER['PHP_SELF']。

=================================================================================================================

在 PHP 众多预定义服务器变量中,$_SERVER["REQUEST_URI"] 算是经常用到的,但是这个变量只有 apache 才支持,因此,我们需要一个更加通用的方式来获取 REQUEST_URI
的值,本文就是结束这一问题的解决方案。

<?php


// 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案

// 来源:drupal-5.1 bootstrap.inc

// 整理:CodeBit.cn ( http://www.CodeBit.cn )


function
request_uri()

{

if
(isset(
$_SERVER
[
'REQUEST_URI'
]))

{

$uri
=
$_SERVER
[
'REQUEST_URI'
];

}

else

{

if
(isset(
$_SERVER
[
'argv'
]))

{

$uri
=
$_SERVER
[
'PHP_SELF'
] .
'?'
.
$_SERVER
[
'argv'
][0];

}

else

{

$uri
=
$_SERVER
[
'PHP_SELF'
] .
'?'
.
$_SERVER
[
'QUERY_STRING'
];

}

}

return
$uri
;

}


?>


$_SERVER[ "REQUEST_URI "]只在支持PATH_INFO的web服务器中可用

具体对php来讲就是apache下可用,php5中可用

另外$_SERVER只在php4.1.0以上可用

$_SERVER["REQUEST_URI"]函数

预定义服务器变量的一种,所有$_SERVER开头的都叫做预定义服务器变量 REQUEST_URI的作用是取得当前URI,也就是除域名外后面的完整的地址路径

例如。当前页面是http://www.zixueku.com/plus/search.php?kwtype=0&keyword=php&searchtype=titlekeyword

echo $_SERVER["REQUEST_URI"];

结果就为:plus/search.php?kwtype=0&keyword=php&searchtype=titlekeyword

假如命令行的地址是:http://www.baidu.com/index.php

那么:

$_SERVER['HTTP_HOST']=='www.baidu.com'

$_SERVER['PHP_SELF']=='/index.php'

明白了吧,一个是主机地址,一个是脚本文件的绝对路径


“PHP_SELF”

当前正在执行脚本的文件名,与 document root 相关。举例来说,在 URL 地址为 http://www.jb51.net/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将会得到 /test.php/foo.bar 这个结果。__FILE__ 常量包含当前(例如包含)文件的绝对路径和文件名。

“SCRIPT_NAME”

包含当前脚本的路径。这在页面需要指向自己时非常有用。__FILE__ 包含当前文件的绝对路径和文件名(例如包含文件)。

主要的原因如像:$_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];

找到更好的原因是:

今天在Dreamhost上安裝一套PHP程序時發現連接的地址都會多出一個cgi-system來,但是程序的config並沒有問題,查了查資料才發現是SCRIPT_NAME和PHP_SELF不同造成的問題。

通常在本機測試 $_SERVER['SCRIPT_NAME'] 跟 $_SERVER['PHP_SELF'] 大概看不出有什麼不同,因為大部分的PHP不是以CGI模式運行的。

但 DreamHost 上的 PHP 是以 CGI 方式運行,二者就有明顯不同的差異。

echo $_SERVER['SCRIPT_NAME']; // (/cgi-system/php.cgi)

echo $_SERVER['PHP_SELF']; // (/admin/test.php)

从http://lists.nyphp.org/pipermail/talk/2005-July/015339.html 发现了一个说明。老外说的。

SCRIPT_NAME solves all the problems mentioned

in this thread - it's just the script name, without any extra garbage

that might be tacked on by the user.PHP_SELF explicitly includes that

extra garbage, so solutions in this thread that involve stripping the

garbage off of PHP_SELF to make it safe are really, really missing the

point - just use SCRIPT_NAME instead.Please don't use FORM ACTION=”";

according to the spec, what the browser does with that is undefined, so

even if it works in current browsers, it might not work in future ones
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐