2010-11-19 47 views
0

我希望能夠移動我的代碼並能夠發現路徑以影響某些變量的值。這將被放置在變量初始化的頁面中。動態查找路徑,有沒有更好的方法?

這就是我想出了:

$path_array = explode('/', $_SERVER['SCRIPT_FILENAME']); 

$out = ""; 
// -3 represents the number of folders and files to go back to reach the wanted path 

for($i=0; $i < count($path_array) - 3; $i++){ 
    $out .= $path_array[$i].'/'; 
} 

那麼,作爲一個例子,我可以做到以下幾點:

$dyn_path_1 = $out . 'folder1/'; 
$dyn_path_2 = $out . 'folder2/something_else/'; 
$dyn_path_3 = $out . 'folder3/'; 

是否有內置的,我可能會錯過這將使功能這已過時?

ps:這將使我們能夠擁有多個工作副本的代碼,而無需擔心這些變量,只要我們簽出代碼。

編輯#1:變量文件的

路徑:根/ folderA/FolderB中/ var.php

在var.php,我要背下來去根是根據2-3個步驟在方法上。我不知道是否會做這樣的事情是可能的:

echo some_function("../../file_I_know.php"); 

哪位能返回:C:/根/

回答

0

看看PHP的「魔法常量」定義,大多數人使用dirname(FILE)以獲取最初執行的腳本的目錄,將其綁定到一個常量並將其用作基所有其他目錄參考。從而使您的腳本位置獨立。

這是我通常使用:

if (!defined('SITE_BASE_PATH')) { 
    $baseDir = dirname(__FILE__); // Get directory of THIS file 
    $baseDir = str_replace("\\", "/", $baseDir); // Replace backslashes with forward incase we're in Windows 
    $baseDir = realpath($baseDir); // Convert relative path to real path (no '..' etc) 
    $baseDir .= "/"; // Add trailing slash - so that we can append filenames directly 
    define('SITE_BASE_PATH', $baseDir); // define the constant 
} 

或者短格式:

define(SITE_BASE_PATH, realpath(str_replace("\\", "/", dirname(__FILE__))) . '/'); 

更多信息請參見以下幫助: http://php.net/manual/en/language.constants.predefined.php

+0

這個怎麼樣:dirname(realpath(「../../ known_file.txt」)); – TekiusFanatikus 2010-11-19 14:15:50

+0

@TekiusFanatikus是的,這將工作,但是這取決於文件保留其相對位置和名稱,而上述定義沒有依賴關係。 – Orbling 2010-11-19 14:19:01

+0

同意並注意。這是我想我最終會使用的解決方案:dirname(str_replace(「\\」,「/」,realpath(「../../ known_file.txt」)))... @All:thanks for所有的幫助! – TekiusFanatikus 2010-11-19 14:27:52

0

哎,你可能想嘗試__FILE__,這是文件的絕對路徑,你'繼續。而dirname(__FILE__)可能正是你所需要的。

+0

它是'__FILE__'。修正了你的答案。 – Gumbo 2010-11-19 13:55:22

0

我認爲這是一個最boollet-proof方式(在index.php中):

公共目錄使用本: realpath (dirname (__FILE__))

的應用基礎目錄: realpath (dirname (__FILE__). "/../")

希望有所幫助。

相關問題