2011-11-05 127 views
0

我已經有一個文件header.php這是require()'d幾乎在一個特定的包中的每個文件。其中一個用途是檢查文件db_conn.php是否存在,如果不是,則重定向到特定頁面 - ,除了時,它將require()'d轉換爲的文件爲/admin/settings/index.php使用包含文件獲取文件的路徑/名稱?

但是,我剛剛纔意識到,常量__FILE__屬於header.php而不是require()'d使它無用的文件。

我想知道是否有可能獲得其中header.phprequire()'d的父文件的路徑和文件名?

僅供參考,這裏是我的代碼:

if(file_exists($rp . "/_static/inc/db_conn.php")) { 
    require $rp . "/_static/inc/db_conn.php"; 
} elseif(__FILE__ == $rp . "/admin/settings/index.php" && !file_exists($rp . "/_static/inc/db_conn.php")) { 
    $init = true; 
} else { 
    header("Location:" . $server_name['plat'] . "/admin/settings/?error=1"); 
} 

任何幫助將不勝感激!謝謝!

回答

1

那麼,對於複雜的嵌套包括我所知道的唯一方法是使用debug_backtrace()

然而,對於這樣一個普通情況下,SCRIPT_FILENAME的PHP_SELF是足夠了,我相信

+0

道具,這正是我需要的!對於其他人,我使用了'realpath($ _ SERVER ['SCRIPT_FILENAME'])',它可以很好地工作。 – Avicinnian

1

嗯,你可以調試debug_backtrace來找出答案。但是,更好的解決方案是在/admin/settings/index.php中設置一個變量,指出是否應該查找db_conn.php。這是可能的,因爲範圍繼承到的包含文件:

/admin/settings/index.php:

$check_for_dbfile = false; 

db_conn.php:

if(!isset($check_for_dbfile)) { 
    // do your check.. 
} 
0

嘗試使用

$arr_scripts[] = __FILE__; 

在每個文件的頂部......並在稍後分析,如果需要的話。