2012-10-31 66 views
1

我想在PHP中獲取當前執行文件的完整路徑。如何獲得執行文件的完整路徑?

realpath()返回路徑沒有腳本文件名。
pathinfo()如果不通過整條路徑就不能使用它。
__FILE__獲取調用文件的路徑(即;其中__FILE__常數被調用),其可能在included file內;我不想要。

$_SERVER變量REQUEST_URI, SCRIPT_NAME & PHP_SELF不返回完整路徑。

最有希望的是從警告的$_SERVER可變開SCRIPT_FILENAME ..

如果腳本CLI中被執行,作爲相對路徑,例如file.php或../file.php ,$ _SERVER ['SCRIPT_FILENAME']將包含用戶指定的相對路徑。

正是我想要的回報$_SERVER['SCRIPT_FILENAME']/home/site/public_html/index.php,只是不是100%肯定,如果使用是安全的在所有情況下使用?

後者是最好的方法嗎?除CLI之外,它是否會始終爲正常的Web請求返回正確的路徑?

+0

可B本是你想要'目錄名(__ FILE __)。 「/ curruntFile.php」' –

回答

1

這應該工作:

$a = get_included_files(); 
echo $a[0]; 

報價從get_included_files()文檔:

原名被認爲是一種「包含文件」,因此它 將通過引用的文件一起列出的腳本包括和 家庭。

測試

<!-- main.php --> 
<?php include "middle.php"; ?> 

<!-- middle.php --> 
<?php include "inner.php"; ?> 

<!-- inner.php --> 
<?php var_dump(__FILE__, $_SERVER["PHP_SELF"], get_included_files()); ?> 

輸出

string(21) "C:\inetpub\wwwroot\inner.php" 
string(9) "/main.php" 
array(3) { 
    [0]=> 
    string(20) "C:\inetpub\wwwroot\main.php" <-- this is what you are looking for 
    [1]=> 
    string(22) "C:\inetpub\wwwroot\middle.php" 
    [2]=> 
    string(21) "C:\inetpub\wwwroot\inner.php" 
} 
+0

不錯!這似乎做到了! :) – Brett

+0

這之間的一個有趣的差異'$ _ SERVER [「SCRIPT_FILENAME」]'是這會返回100%真實路徑與Windows系統上的反斜槓和'$ _ SERVER [「SCRIPT_FILENAME」]'將返回路徑以斜槓。 :) – Brett

0

如果您想將當前文件,你可以使用全局實例

__FILE__ 
檢索

更多信息 見http://php.net/manual/en/language.constants.predefined.php如果你想獲取該文件位於

目錄
// PHP < 5.3 
dirname(__FILE__); 

// PHP > 5.3 
__DIR__ 

http://php.net/manual/en/language.constants.predefined.phphttp://nl1.php.net/manual/en/function.dirname.php

編輯: 檢索當前執行腳本,你可以得到

$_SERVER['SCRIPT_FILENAME'] 

這將返回exectued文件的文件名。有關更多信息,請參閱http://php.net/manual/en/reserved.variables.server.php

+0

請重新閱讀我的問題。我已經解釋過我不能使用'__FILE__'。 – Brett

+0

@Brett我有更新我的回答對你 – Bearwulf

相關問題