basename(__ FILE__)是否有區別?和$ _SERVER ['SCRIPT_NAME']?
我只是看到人們經常使用的2之一,和Im不確定的,如果它的事項要使用哪一個。我當然試過他們,他們似乎輸出了同樣的東西。就是想。 :)
basename(__ FILE__)是否有區別?和$ _SERVER ['SCRIPT_NAME']?
我只是看到人們經常使用的2之一,和Im不確定的,如果它的事項要使用哪一個。我當然試過他們,他們似乎輸出了同樣的東西。就是想。 :)
__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全局變量
是的,是有一定你需要考慮的重大差異。
一個用於獲取包含腳本的完整路徑(當前文件),另一個用於獲取腳本路徑(相對於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__)
,在這種情況下,將返回包含文件的名稱。
__FILE__
返回此命令最初所在的腳本名稱。
$_SERVER['SCRIPT_NAME']
返回調用此命令的腳本名稱。例如,如果您有調用函數「ThisFile()」的「Script_A.php」,其中「ThisFile()」通過include_once在另一個「Script_B.php」中,則結果將會不同。
__FILE__
=>返回Script_B
$_SERVER['SCRIPT_NAME']
=>返回腳本A
不那麼重要,但我認爲這是值得注意的。請注意,也有$_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
- 符號鏈接路徑