2017-02-23 52 views
0

basename(__ FILE__)是否有區別?和$ _SERVER ['SCRIPT_NAME']?

我只是看到人們經常使用的2之一,和Im不確定的,如果它的事項要使用哪一個。我當然試過他們,他們似乎輸出了同樣的東西。就是想。 :)

回答

0
__FILE__ returns the filename of the script that is currently being run. 
dirname returns the directory of a given filename 
basename() returms the filename component of path. To put it better: it strips any "parent" directories off a given string. 

$_SERVER['SCRIPT_NAME']  Returns the path of the current script 

號兩者都是same.They將返回同樣的事情,但我認爲$ _ SERVER [「SCRIPT_NAME」]是更好,因爲它是小和PHP全局變量

0

是的,是有一定你需要考慮的重大差異。

一個用於獲取包含腳本的完整路徑(當前文件),另一個用於獲取腳本路徑(相對於Web服務器)。所以你可能會使用一個或另一個取決於你想要完成的事情。

所以它會在不同的格式返回不同的結果:

  • __FILE__C:\xampp\htdocs\project\myfileincluded.php
  • $_SERVER['SCRIPT_NAME']/project/index.php

__FILE__Magic constants的一部分,將返回的絕對路徑目前包含文件。

$_SERVER['SCRIPT_NAME']Predefined server variables的一部分,它將返回最初在服務器中相對於服務器根路徑調用的腳本的路徑。

在記錄消息或查看提取當前項目名稱,分支名稱等時,您可能想要使用__FILE__。當您要刷新頁面時,可能需要使用$_SERVER['SCRIPT_NAME'],找出通話等。

在你的例子中,你正在使用basename(__FILE__),在這種情況下,將返回包含文件的名稱。

0

__FILE__返回此命令最初所在的腳本名稱。
$_SERVER['SCRIPT_NAME']返回調用此命令的腳本名稱。例如,如果您有調用函數「ThisFile()」的「Script_A.php」,其中「ThisFile()」通過include_once在另一個「Script_B.php」中,則結果將會不同。

__FILE__ =>返回Script_B
$_SERVER['SCRIPT_NAME'] =>返回腳本A

0

不那麼重要,但我認爲這是值得注意的。請注意,也有$_SERVER['SCRIPT_FILENAME']

一個區別是他們返回包含的文件不同的路徑:

  • __FILE__返回路徑包含文件(其中__FILE__被調用)。
  • $_SERVER['SCRIPT_FILENAME']返回正在執行的腳本的路徑(頂級腳本)。

但是,在基於Linux的系統和Apache web服務器上也可能存在差異,其中DocumentRoot是通過符號鏈接路徑定義的。

對於我的網站例如真實路徑是:

  • /mnt/data/www/mysite.org/

還有一個目錄/www/其中位於此符號鏈接:

  • mysite.org

指向/mnt/data/www/mysite.org/

然後DocumentRoot(Apache的虛擬主機定義)配置爲符號鏈接路徑/www/mysite.org

在一些PHP腳本根本index.php設置:

  • __FILE__包含/mnt/data/www/mysite.org/index.php - 真實路徑
  • $_SERVER['SCRIPT_FILENAME']包含/www/mysite.org/index.php - 符號鏈接路徑
相關問題