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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值