PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 與 $_SERVER['REQUEST_URI'] 之間的區別

PHP $_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 與 $_SERVER['REQUEST_URI']

$_SERVER['PHP_SELF']、$_SERVER['SCRIPT_NAME'] 與 $_SERVER['REQUEST_URI'] 三者很是類似,返回的都是與當前 URL 或 PHP 程序文件相關的信息:php

  1. $_SERVER['PHP_SELF']:相對於網站根目錄的路徑及 PHP 程序名稱。
  2. $_SERVER['SCRIPT_NAME']:相對於網站根目錄的路徑及 PHP 程序文件名稱。
  3. $_SERVER['REQUEST_URI']:訪問此頁面所需的 URI 。

一個簡單的例子能夠看出它們的區別。URL 地址以下:html

http://www.ywp.com/php/index.php/test/foo?username=hbolive
  • $_SERVER['PHP_SELF'] 獲得:/php/index.php/test/foo
  • $_SERVER['SCRIPT_NAME'] 獲得:/php/index.php
  • $_SERVER['REQUEST_URI'] 獲得:/php/index.php/test/foo?username=hbolive

從該例子能夠看出:ide

  1. $_SERVER['PHP_SELF'] 則反映的是 PHP 程序自己;
  2. $_SERVER['SCRIPT_NAME'] 反映的是程序文件自己(這在頁面須要指向本身時很是有用);
  3. $_SERVER['REQUEST_URI'] 則反映了完整 URL 地址(不包括主機名)。

其實從各自的命名上,也能夠體現出它們之間的細微差異。測試

特別的,對於以下地址:網站

http://www.ywp.com/
  • $_SERVER['PHP_SELF'] 獲得:/index.php
  • $_SERVER['SCRIPT_NAME'] 獲得:/index.php
  • $_SERVER['REQUEST_URI'] 獲得:/

至於有人提到 $_SERVER['PHP_SELF'] 與 $_SERVER['SCRIPT_NAME'] 在 PHP 以 CGI 模式運行下會有區別。因爲 PHP 在 CGI 模式運行下並很少見,測試較爲麻煩,在此就再也不敘述了。若有這種狀況,可注意並自行測試。spa

但願在理解了它們之間的區別以後,以便選擇更適合本身程序的來使用。server

相關文章
相關標籤/搜索