设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1102|回复: 7

[推荐] PHP获取当前url路径的函数及服务器变量 [复制链接]

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2836
精华
2
声望
12984 点
金币
2999 Mold
被赞许
28 次
注册时间
2006-4-28

Mod中国同盟社至高荣誉

发表于 2010-8-12 10:43:39 |显示全部楼层
说明:查询(query)的字符串
2,$_SERVER["REQUEST_URI"]
说明:访问此页面所需的URI

3,$_SERVER["SCRIPT_NAME"]
说明:包含当前脚本的路径

4,$_SERVER["PHP_SELF"]
说明:当前正在执行脚本的文件名

实例:
1,http://www.marshal.sh.cn/ (直接打开主页)
结果:
$_SERVER["QUERY_STRING"] = ""
$_SERVER["REQUEST_URI"] = "/"
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"]     = "/index.php"

2,http://www.marshal.sh.cn/?p=222 (附带查询)
结果:
$_SERVER["QUERY_STRING"] = "p=222"
$_SERVER["REQUEST_URI"] = "/?p=222"
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"]     = "/index.php"

3,http://www.marshal.sh.cn/index.php?p=222&q=biuuu
结果:
$_SERVER["QUERY_STRING"] = "p=222&q=biuuu"
$_SERVER["REQUEST_URI"] = "/index.php?p=222&q=biuuu"
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"]     = "/index.php"

$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"] 获取http://www.marshal.sh.cn后面的值,包括/
$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名
[separator]



当前url:"http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']





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

代码如下:



代码
  1. <?php
  2. echo $_SERVER['DOCUMENT_ROOT']."<br>"; // 获得服务器文档根变量
  3. echo $_SERVER['PHP_SELF']."<br>"; //获得执行该代码的文件服务器绝对路径的变量
  4. echo __FILE__."<br>"; //获得文件的文件系统绝对路径的变量
  5. echo dirname(__FILE__); // 获得文件所在的文件夹路径的函数
  6. ?>
复制代码
  1. //server函数
  2. $_SERVER["HTTP_REFERER"]=http://localhost/example/
  3. $_SERVER["HTTP_ACCEPT_LANGUAGE"]=zh-cn
  4. $_SERVER["HTTP_ACCEPT_ENCODING"]=gzip, deflate
  5. $_SERVER["HTTP_USER_AGENT"]=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
  6. $_SERVER["HTTP_HOST"]=localhost
  7. $_SERVER["HTTP_CONNECTION"]=Keep-Alive
  8. $_SERVER["PATH"]=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\MySQL\MySQL Server 5.0\bin;C:\php;C:\php\ext
  9. $_SERVER["SystemRoot"]=C:\WINDOWS
  10. $_SERVER["COMSPEC"]=C:\WINDOWS\system32\cmd.exe
  11. $_SERVER["PATHEXT"]=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
  12. $_SERVER["WINDIR"]=C:\WINDOWS
  13. $_SERVER["SERVER_SIGNATURE"]=
  14. Apache/2.0.55 (Win32) PHP/5.1.1 Server at localhost Port 80 \\使用的何服务器
  15. $_SERVER["SERVER_SOFTWARE"]=Apache/2.0.55 (Win32) PHP/5.1.1
  16. $_SERVER["SERVER_NAME"]=localhost \\服务器名称
  17. $_SERVER["SERVER_ADDR"]=127.0.0.1
  18. $_SERVER["SERVER_PORT"]=80 \\服务器端口
  19. $_SERVER["REMOTE_ADDR"]=127.0.0.1
  20. $_SERVER["DOCUMENT_ROOT"]=D:/example \\网站的主目录
  21. $_SERVER["SERVER_ADMIN"]=sss@163.com \\安装APACHE时设置的邮箱
  22. $_SERVER["SCRIPT_FILENAME"]=D:/example/example/servervalues.php \\当前的网页的绝对路径,
  23. $_SERVER["REMOTE_PORT"]=1076 \\远程端口
  24. $_SERVER["GATEWAY_INTE**CE"]=CGI/1.1
  25. $_SERVER["SERVER_PROTOCOL"]=HTTP/1.1
  26. $_SERVER["REQUEST_METHOD"]=GET
  27. $_SERVER["QUERY_STRING"]=\\ 获取?号后面的内容
  28. $_SERVER["REQUEST_URI"]=例子:/example/servervalues.php?a=1& amp;b=2
  29. $_SERVER["SCRIPT_NAME"]=例子:/example/servervalues.php
  30. $_SERVER["PHP_SELF"]=/example/servervalues.php \\返回当前网页的相对路径.
  31. $_SERVER["REQUEST_TIME"]=1179190013 \\运行时间 单位为十万分之一毫秒
  32. $_SERVER["argv"]=Array
  33. $_SERVER["argc"]=0
复制代码
1,$_SERVER["QUERY_STRING"]
说明:查询(query)的字符串
2,$_SERVER["REQUEST_URI"]
说明:访问此页面所需的URI
3,$_SERVER["SCRIPT_NAME"]
说明:包含当前脚本的路径
4,$_SERVER["PHP_SELF"]
说明:当前正在执行脚本的文件名
实例:
1,http://www.marshal.sh.cn / (直接打开主页)
结果:
$_SERVER["QUERY_STRING"] = “”
$_SERVER["REQUEST_URI"] = “/”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
2,http://www.marshal.sh.cn/?p=222 (附带查询)
结果:
$_SERVER["QUERY_STRING"] = “p=222″
$_SERVER["REQUEST_URI"] = “/?p=222″
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
3,http://www.marshal.sh.cn /index.php?p=222&q=biuuu
结果:
$_SERVER["QUERY_STRING"] = “p=222&q=biuuu”
$_SERVER["REQUEST_URI"] = “/index.php?p=222&q=biuuu”
$_SERVER["SCRIPT_NAME"] = “/index.php”
$_SERVER["PHP_SELF"] = “/index.php”
$_SERVER["QUERY_STRING"]获取查询语句,实例中可知,获取的是?后面的值
$_SERVER["REQUEST_URI"] 获取http://www.marshal.sh.cn后面的值,包括/
$_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php
$_SERVER["PHP_SELF"] 当前正在执行脚本的文件名


----------------------

代码


<?php
/**
__FILE__ ,
getcwd(),
$_SERVER["REQUEST_URI"],
$_SERVER["SCRIPT_NAME"],
$_SERVER["PHP_SELF"],
$_SERVER["SCRIPT_FILENAME"],

来观察一下这些变量或函数的异同.
假设有一个请求地址为: http://localhost:8080/test.php/age=20
而 test.php 的完整路径是: D:/server/www/example/test.php
1) getcwd()
将得到浏览器请求的页面文件所在的目录. 即test.php 文件所在的目录: D:/server/www/example/ ,
如果在 test.php 执行了 require 或 include 语句, 比如 inculde(”test_dir/test2.php”),
那么在 test2.php 里 getcwd()函数 返回的也将是 test.php 所在的目录.
2) __FILE__
一个魔术变量, 用它将得到 __FILE__ 变量所在文件的完整路径,
比如: test.php 里 __FILE__ 将得到 D:/server /www/example/test.php ,
test_dir/test2.php 里的 __FILE__ 将得到 D:/server /www/example/test_dir/test2.php

3) $_SERVER["SCRIPT_FILENAME"]
将得到浏览器请求的页面文件的完整路径.
test.php 和 test_dir/test2.php 里用 $_SERVER["SCRIPT_NAME"] 都将得到 D:/server/www/example/test.php.

4) $_SERVER["SCRIPT_NAME"]
将得到浏览器请求的页面文件的文件名,注意: 与 $_SERVER["SCRIPT_NAME"] 不同, 此变量只得到文件名而不包含路径,
在 test.php 与 test_dir/test2.php 用$_SERVER["SCRIPT_NAME"] 得到的都将是 test.php.
当然, 在test.php 与 test_dir/test2.php 执行 basename($_SERVER["SCRIPT_FILENAME"]) 与 $_SERVER["SCRIPT_NAME"] 相同.
执行 在test.php 与 test_dir/test2.php 执行 realpath(”test.php”) 得到的结果与 $_SERVER["SCRIPT_FILENAME"] 相同.

5) $_SERVER["PHP_SELF"]
将得到浏览器请求页面的文件名, 并剥掉问号 ? 后的内容, 注意:不包含路径,
比如在客户端里请求 http://localhost:8080 /test.php?age=20&name=Tom,
那么 test.php 和 test_dir/test2.php 的 $_SERVER["PHP_SELF"] 都将得到 “test.php”。 “age=20&name=Tom”被剥掉。
而如果客户端里请求 http://localhost:8080/test.php /age=20&name=Tom,
那么 test.php 和 test_dir/test2.php 的 $_SERVER["PHP_SELF"] 都将得到 “test.php /age=20&name=Tom”。

6) $_SERVER["REQUEST_URI"]
将得到浏览器请求页面的文件名, 以及文件名之后的所有内容(注意: 井号 # 之后的内容将被略去),
比如在客户端里请求 http://localhost:8080 /test.php?age=20&name=Tom,
那么 test.php 和 test_dir/test2.php 的 $_SERVER["REUEST_URI"] 都将得到 “test.php”。 “age=20&name=Tom”被剥掉。
而如果客户端里请求 http://localhost:8080/test.php /age=20&name=Tom,
那么 test.php 和 test_dir/test2.php 的 $_SERVER["REQUEST_URI"] 都将得到 “test.php /age=20&name=Tom”。
*/

// test.php:
echo “test1.php variables <br />”;
echo “getcwd: “, getcwd(), “<br />”;
echo “__FILE__: “, __FILE__, “<br />”;
echo “REQUEST_URI: “, $_SERVER["REQUEST_URI"], “<br />”;
echo “SCRIPT_NAME: “, $_SERVER["SCRIPT_NAME"], “<br />”;
echo “PHP_SELF: “, $_SERVER["PHP_SELF"], “<br />”;
echo “SCRIPT_FILENAME “, $_SERVER["SCRIPT_FILENAME"] , “<br />”;

// 把 test2.php 包含进来, 在 test2.php 里输出上面的变量,看有什么不同:
include_once(”test2/test2.php”);

?>




From: http://www.marshal.sh.cn/post/489/

使用道具 举报

Honorary Member

地狱恶势力

Rank: 7Rank: 7Rank: 7

帖子
3449
精华
4
声望
15019 点
金币
2052 Mold
被赞许
90 次
注册时间
2010-4-4

Modchina灌水王 可爱小猫 懒人勋章

发表于 2010-8-12 11:02:39 |显示全部楼层
十分深奥的东西..看不懂..纯属支持而已

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1442
精华
0
声望
5057 点
金币
523 Mold
被赞许
3 次
注册时间
2009-9-11

可爱小猫

发表于 2010-8-12 11:05:01 |显示全部楼层
看不懂
好无聊

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
649
精华
0
声望
3297 点
金币
3 Mold
被赞许
3 次
注册时间
2009-5-25
发表于 2010-8-12 21:06:36 |显示全部楼层
恩恩恩 这些代码还有些能看懂0- 0
不过出了点问题

使用道具 举报

Rank: 5Rank: 5

帖子
479
精华
0
声望
1062 点
金币
83 Mold
被赞许
0 次
注册时间
2009-10-25
发表于 2010-8-15 16:17:03 |显示全部楼层
不知道是什么,完全开你不懂~~~

使用道具 举报

Rank: 8Rank: 8

帖子
796
精华
0
声望
1686 点
金币
786 Mold
被赞许
16 次
注册时间
2008-10-4
发表于 2010-8-18 23:57:49 |显示全部楼层
PHP……

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
2123
精华
1
声望
5205 点
金币
505 Mold
被赞许
4 次
注册时间
2009-3-20

Modchina灌水王

发表于 2010-8-19 05:29:31 |显示全部楼层
有用,但本人用的不多,收藏先

使用道具 举报

头像被屏蔽

禁止发言

帖子
74
精华
0
声望
48 点
金币
-28 Mold
被赞许
-4 次
注册时间
2011-8-26
发表于 2011-8-28 15:08:58 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部