php中与请求路径相关的一些预定义变量的区别

假设访问路径是:

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()获取当前脚本文件所在的服务器端目录路径


你可能感兴趣的:(php中与请求路径相关的一些预定义变量的区别)