2012-12-01 83 views
0

我知道這個問題已經在SO中討論過了,但我還是無法找到解決方案。如何包含相對於當前文件而不是父文件的文件?

我有assign.php:

$a=1; 

require.php:

require "assign.php"; 

和echo.php:

require "require.php" 
echo $a; 

,其輸出1 問題是,當我想從不同位置使用「require.php」,而不需要重複文件。例如,

/folder/echo.php:

require "../require.php"; 
echo $a; 

將無法​​正常工作,因爲require.php正試圖要求/folder/assign.php不存在。

試圖在require.php使用一個完整的URL:

require "http://site.com/assign.php"; 

將無法​​工作或者是因爲代碼不被包括在內,但編譯,因爲$ a不全球,它是undefiend 。

有人告訴我,使用全局變量確實不被推薦。

同樣使用文件系統完整路徑被認爲是危險的。

解決方案是什麼?我怎樣才能確保require.php將始終爲assign.php正確的路徑,無論在哪裏require.php包括?

+0

這與逃逸有什麼關係?你在談論文件路徑。另外你從哪裏聽說完整的文件路徑是危險的?你不希望將它們打印爲所有人看到的輸出,但是它們在代碼中沒問題。 –

+0

什麼_is_是您嘗試從另一個位置訪問的文件的路徑?如果它們在同一個文件系統上,即使它需要多個'../../' –

+0

,那麼您肯定能夠正確地獲取路徑。這個問題與標題完全無關。重命名。 –

回答

2

您可以定義一個全局常量並使用它。

define('ROOT_PATH', rtrim(dirname(__FILE__), "\\/")); 

require ROOT_PATH . '/file.php'; 
+0

我應該包括第一行在每個頁面中還是對整個會話有效? – Roy

2

require.php你應該使用

require dirname(__FILE__). "/assign.php"; 

這將包括正確的文件給予的完整路徑,在飛行中產生的。

相關問題