假设访问路径是:
http://localhost/test.src/test.php/home/user/login/?user=root&pwd=111
1、$_SERVER['SCRIPT_NAME']
它是从客户端来看、不包含域名的脚本文件路径,即:
/test.src/test.php
如果你想引用脚本自身,例如把一个表单提交给自己处理时,这可以用这个。
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="get">
2、$_SERVER['SCRIPT_FILENAME']
与 $_SERVER['SCRIPT_NAME'] 不同的是,这是脚本文件在服务器端的绝对路径, 即:
c:/wamp/www/test.src/test.php
说得通俗一点,这就是文件在服务器硬盘上的路径。
3、$_SERVER['PHP_SELF']
与$_SERVER['SCRIPT_NAME']类似,但它还包括了后面第一个问号之前的部分,即:
/test.src/test.php/home/user/login/
4、$_SERVER['PATH_INFO']
它是$_SERVER['SCRIPT_NAME']之后、第一个问号之前的内容,即:
/home/user/login/
它经常用来做为传参载体,被很多系统用来优化url路径格式,最著名的如THINKPHP框架。
但是这个变量不一定会有值,也可能不存在。
/*下面的链接形式不会有PATH_INFO变量*/ http://localhost:83/test.php/index.php http://localhost:83/test.php/ /*下面的链接形式有PATH_INFO变量,但值为符'/' */ http://localhost:83/test.php/index.php/ http://localhost:83/test.php/index.php/?a=b$c=d /*综上得出只要脚本文件名后下一个字符为'/',就会有变量PATH_INFO */
php.ini中的配置参数cgi.fix_pathinfo是用来对设置cgi模式下为php是否提供绝对路径信息或PATH_INFO信息。没有这个参数之前PHP设置绝对路径PATH_TRANSLATED的值为SCRIPT_FILENAME,没有PATH_INFO值。设置这个参数为cgi.fix_pathinfo=1后,cgi设置完整的路径信息PATH_TRANSLATED的值为SCRIPT_FILENAME,并且设置PATH_INFO信息;如果设为cgi.fix_pathinfo=0则只设置绝对路径PATH_TRANSLATED的值为SCRIPT_FILENAME。cgi.fix_pathinfo的默认值是1。
5、$_SERVER['QUERY_STRING']
它是第一个问号以后的内容,即:
user=root&pwd=111
6、__FILE__
__FILE__是脚本文件本身的绝对路径。它与$_SERVER['SCRIPT_FILENAME']有点不同,下面看一个实例。假设a.php包含了b.php。
// 以下是test/a.php脚本中的内容: <?php include("b.php"); ?>
那 么在b.php中,$_SERVER['SCRIPT_FILENAME']可能会是 /home/a88888888/public_html /test/a.php。虽然$_SERVER['SCRIPT_FILENAME']是在b.php内,但b.php是在a.php内运行的,因此得到 的是a.php的路径。而在b.php中,__FILE__可能会是 /home/a88888888/public_html/test/b.php, 这是__FILE__所处的真正位置。
7、basename()获取文件名,dirname()获取目录名,dirname($dir). '/' .basename($dir)就是指定文件在服务器端的完整路径
8、getcwd()获取当前脚本文件所在的服务器端目录路径