2013-11-15 174 views
0

我在php中的相對路徑有點麻煩。在我的課程之一,我有以下代碼:確定應用程序的根目錄

$iniPath = $_SERVER['DOCUMENT_ROOT'] . "/movies/config.ini"; 
$ini_array = parse_ini_file($iniPath, true); 

此代碼的工作完美,因爲它返回「/var/www/movies/config.ini」。

但問題是代碼不可攜帶。如果它安裝在另一臺服務器上,則它們可能不會安裝在/ movies /中。

tl; dr如何在php中將應用程序目錄指定爲根目錄?

+0

'$ _ SERVER [ 'DOCUMENT_ROOT']'會給你的根目錄。你的意思是當前腳本運行的目錄(相對於根目錄)? – BenM

+1

您應該爲潛在用戶使用的文件夾/子文件夾設置另一個變量,然後用變量名稱替換'/ movies /'。甚至可能添加一個'if'條件來啓動。這個變量可能是'$ folder =「change_this」;' –

+0

@BenM的影響的東西,但是應用程序正在運行。我把所有的php類放在一個名爲classes的文件夾中。因此,它相對於應用程序目錄,而不是在那裏特定的腳本運行 – triunenature

回答

1

您可以使用__DIR__dirname(__FILE__)來確定相對於您的應用程序的當前路徑。

您可以定義稱爲第一文件中的常數(或配置或啓動文件中):

<?php 
    define('ROOT_DIR', __DIR__.'/'); 
    // and define some other base path 
    // you can also define everything in a separate file 
    define('MOVIE_DIR', ROOT_DIR.'movies/'); 
    // and define absolute path 
    define('CLASS_DIR', '/usr/local/share/something/that/will/never/change/'); 
    // then your code will looks like 
    $iniPath = MOVIE_DIR . '/config.ini'; 
    $ini_array = parse_ini_file($iniPath, true); 

編輯:的其他替代(你的問題閱讀您的意見後)是使用set_include_path但是,這並不常用。

+0

我從來沒有真正使用的定義,我只是試過。在我的index.php中,我做了定義語句,然後在我的類文檔中做了APP_ROOT。 '/config.ini',它表示找不到「APP_ROOT/config.ini」。 如何將定義從一個php頁面傳遞給另一個?餅乾? – triunenature

+0

不,你必須把你所有的定義放在一個文件中(讓我們把它稱爲define.php)。然後在每個必須使用它們的文件中包含該文件。一個基本模式是讓index.php第一行包含'require_once('config.php')',其中包含define()和其他初始化過程,必須在所有其他.php文件中完成 – Asenar

+0

有趣!謝謝!!!有效 – triunenature

相關問題