2012-04-24 34 views
1

我正在構建一個通過不同目錄傳播php文件的web應用程序,因此一個典型的文件可能包含多個。所有這些文件到處。include()或require()時,我總是必須使用../../相對於我的文件嗎?有一個簡單的方法嗎?

一個PHP文件可能是這樣的:

include('../../some.php'); 
require('../../some.php'); 

,並在另一個文件中,你可能有這樣的事情:

include('../../../../some.php'); 
require('../../../../some.php'); 

點的存在,這樣可以得到一點點伸出手,有點難以跟蹤。有沒有一種方法可以做到這一點,我不需要一直使用../../..

我試着這樣做:

include('http://www.mywebsite.com/some.php'); 
require('http://www.mywebsite.com/some.php'); 

,但它似乎並沒有工作,但有什麼好笑的是,當我使用的需要,只有 call to function x() error, function or object doesn't exist類型的錯誤我不會得到一個PHP錯誤。它從來沒有說過這個文件不存在。先謝謝你。

回答

4

不要相信$_SERVER變量。在某些環境中,他們可以由發出請求的用戶設置/更改。在index/bootstrap文件中手動定義基本路徑並在需要時使用它會更好。

define('SYSTEM_PATH', __DIR__ . '/'); 

或在5.3之前,PHP的版本,你可以做到這一點

define('SYSTEM_PATH', dirname(__FILE__) . '/'); 

現在你可以隨時知道路徑到您的文件。

require(SYSTEM_PATH . 'lib/class.php'); 

兩個__DIR____FILE__安全常數由PHP設置和可以信任。

可以自動加載類是這樣的:

function __autoload($class_name) 
{ 
    require SYSTEM_PATH . strtolower($class_name) . '.php'; 
} 

在其他新聞中,我永遠不能認爲使用的include()。如果你需要使用包含你做錯了什麼。

+0

「在某些環境中,他們可以由發出請求的用戶設置/更改。」你能再擴充一點嗎? – 2012-04-24 23:59:57

+0

如何將文件包含到另一個PHP文檔中?什麼是正確的方式去做這件事? – 2012-04-25 00:04:15

+0

謝謝Xeoncross,我要準備我的應用程序來使用'_autoload'函數。我做了一些研究,真的很喜歡它做的。我知道我沒有在我的問題上提出太多細節,但'_autoload()'函數幾乎完成了我應用程序的部分功能。唯一的問題是我也有一些功能,我不確定這會起作用,但我確定它有類似的功能。 – 2012-04-25 16:44:41

0

使用此:

include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php'); 

這將使你的文檔根目錄,然後建立從那裏休息...

+0

'$ _SERVER ['DOCUMENT_ROOT]'變量是否會自動設置爲我的URL? ('http:// www.mywebsite.com')還是我必須申報? – 2012-04-24 23:41:46

+0

它由服務器設置。你不應該改變任何東西。要測試它,只需'echo $ _SERVER ['DOCUMENT_ROOT'];'查看結果。 – 2012-04-24 23:43:22

+0

@FelipeTadeo PHP會查看您的服務器的文件系統,因此包含路徑可能看起來像「/ home/user/public_html/inc/connect.php」。只有外部世界才能處理像「http:// example.com」這樣的URL,並且在那時所有的PHP都已經被處理。如果你可以包含你將從其他網站引入PHP的URL,這將是非常危險的(除了它根本不起作用的事實)。 – nkorth 2012-04-24 23:55:59

0

您可以設置包括在php.ini路徑,也可以用chdir更改工作目錄。我喜歡兩個,是在安全方面,但這個工作得很好:

chdir($_SERVER['DOCUMENT_ROOT']); 

現在你可以包括你的文件,如果當前是在根文件夾。

相關問題