1、$_SERVER["SCRIPT_NAME"]
說明:包含當前腳本的路徑
2、$_SERVER["PHP_SELF"]
說明:當前正在執行腳本的文件名
3、$_SERVER["QUERY_STRING"]
說明:查詢(query)的字符串
4、$_SERVER["REQUEST_URI"]
說明:訪問此頁面所需的URI
實例:
1.http://52php.cnblogs.com/ (直接打開主頁)
結果:
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"] = "/index.php"
$_SERVER["QUERY_STRING"] = ""
$_SERVER["REQUEST_URI"] = "/"
2.http://52php.cnblogs.com/?p=222 (附帶查詢)
結果:
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"] = "/index.php"
$_SERVER["QUERY_STRING"] = "p=222"
$_SERVER["REQUEST_URI"] = "/?p=222"
3.http://52php.cnblogs.com/index.php?p=222&q=biuuu
結果:
$_SERVER["SCRIPT_NAME"] = "/index.php"
$_SERVER["PHP_SELF"] = "/index.php"
$_SERVER["QUERY_STRING"] = "p=222&q=biuuu"
$_SERVER["REQUEST_URI"] = "/index.php?p=222&q=biuuu"
4.http://52php.cnblogs.com/123/123.php/abc/def?id=222&name=jack
$_SERVER["SCRIPT_NAME"] = "/123/123.php"
$_SERVER["PHP_SELF"] = "/123/123.php/abc/def"
$_SERVER["QUERY_STRING"] = "id=222&name=jack"
$_SERVER["REQUEST_URI"] = "/123/123.php/abc/def?id=222&name=jack"
5.http://52php.cnblogs.com/123/123.php/abc/def.bat?id=222&name=jack
$_SERVER["SCRIPT_NAME"] = "/123/123.php"
$_SERVER["PHP_SELF"] = "/123/123.php/abc/def.bat"
$_SERVER["QUERY_STRING"] = "id=222&name=jack"
$_SERVER["REQUEST_URI"] = "/123/123.php/abc/def.bat?id=222&name=jack"
?
- $_SERVER["SCRIPT_NAME"] ?獲取當前腳本的路徑,如:index.php
- $_SERVER["PHP_SELF"] ?當前正在執行腳本的文件名
- $_SERVER["QUERY_STRING"] ?獲取查詢語句,實例中可知,獲取的是?后面的值
- $_SERVER["REQUEST_URI"] ?獲取http://52php.cnblogs.com后面的值,包括/
總結一下,對于SCRIPT_NAME、PHP_SELF、QUERY_STRING、REQUEST_URI,深入了解將有利于我們 在$_SERVER函數中正確調用這四個值。
一般地:?$_SERVER["REQUEST_URI"] = $_SERVER["PHP_SELF"] . '?' . $_SERVER["QUERY_STRING"]
?
注意:當有地址重寫時,情況有些變化,如:
/class 重寫到 /index.php?app=class&mod=Index&act=index
此時:
$_SERVER['PHP_SELF'] 值等于 /index.php
$_SERVER['QUERY_STRING'] 值等于 /index.php?app=class&mod=Index&act=index
$_SERVER["REQUEST_URI"] 值等于 /class
?
uchome系統中處理技巧:
//處理REQUEST_URI
if (!isset($_SERVER['REQUEST_URI'])) {$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];if (isset($_SERVER['QUERY_STRING'])) $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
}
if ($_SERVER['REQUEST_URI']) {$temp = urldecode($_SERVER['REQUEST_URI']);if (strexists($temp, '<') || strexists($temp, '"')) {$_GET = shtmlspecialchars($_GET); // XSS}
}
?
?
?
延伸閱讀:
PHP獲取當前頁面的URL
PHP獲取當前域名$_SERVER['HTTP_HOST']和$_SERVER['SERVER_NAME']的區別
PHP的$_SERVER['PHP_SELF']造成的XSS漏洞攻擊及其解決方案