2012-08-09 129 views
14

我花了幾天時間研究互聯網,找不到能夠理解並能夠實現的答案。如何爲PHP包含文件設置根文件夾

我有我想要使用include_once文件的網站,並且能夠在本地主機和實際服務器中正確查看網站。

我以前使用過$_SERVER['DOCUMENT_ROOT'],但它不能在本地主機上工作,所以我很難更新和更改網站。

我想要做的是創建一些config.php文件,我可以告訴它,根文件夾要麼被稱爲htdocspublic_html,要「開始」從那裏尋找文件。

或者還有其他方法可以讓我包括工作路徑嗎?

我見過回覆dirname(__FILE__),__DIR__等等,但他們從來沒有解釋過它是如何工作的,在代碼中寫入的地方等等。我有點厭倦和發現部分答案,然後在圈子裏跑來跑去嘗試「填充在「的差距。我不是一個PHP專家,只是想通過使用它來讓我的生活變得更輕鬆。

+0

您在使用任何框架或項目的原始PHP? – 2012-08-09 12:06:05

回答

28

dirname(__FILE__)__DIR__都相同,__DIR__自帶PHP 5.3

這些用於表示「他們調用的文件的路徑」。

 
URL: http://localhost/test/a.php 

DIR: --NIX 
    /var/www/test/a.php 
    --WIN 
    D:\lamp\www\test\a.php 

// a.php's inside 
<?php 
echo __DIR__; 

給你這個在Linux上:/var/www/test

所以,如果你需要在所有項目中的配置參數,只是在你的config.php定義它,也就是您要的文件名使用的是將包括在內。

 
./ 
    config.php 
    index.php 
    header.php 
    footer.php 
    /lib 
    foo.php 
    /tmp 
    bar.php 

./config.php define('ROOT', __DIR__ .'/');

./index.php include_once(ROOT .'header.php'); ... include_once(ROOT .'footer.php');

即,在tmp dir

./tmp/bar使用它。PHP include_once(ROOT .'lib/foo.php');

UPDATE

// config.php 
<?php 
define("ROOT", __DIR__ ."/"); 

所以,我們用這個index.php包括banner.phpbanner.php./banners/banner.php等待;

// index.php and the very first line! 
<?php 
include_once("config.php"); 
?> 
// some html stuff 
// ... 
<?php include_once(ROOT ."banners/banner.php"); ?> 
// some more html stuff 
// ... 

所以,你應該首先包含config.php到你需要它的地方。

我想,這是基本的需要儘可能...

UPDATE

所以你的問題是不是PHP include系統,但問題,反正... :)

如果你的圖像路徑正在改變(所以不固定),你可以這樣做;

// config.php 
define("ROOT", __DIR__ ."/"); 
define("HTTP", ($_SERVER["SERVER_NAME"] == "localhost") 
    ? "http://localhost/your_work_folder/" 
    : "http://your_site_name.com/" 
); 

// banner.php 
<img src="<?php print HTTP; ?>images/banner.gif"> 
+0

我想嘗試和使用這種方法,但我似乎無法做到正確。你認爲你可以給我一個關於config.php的樣子嗎?我一直在嘗試顯示錯誤並且不起作用。另外,如果我有例如有圖像的banner.php有什麼對他們來說是正確的路徑? /images/img01.jpg或images/img01.jpg:P – Vetaxili 2012-08-09 14:01:18

+0

那麼,請參閱更新請求。 – 2012-08-09 14:14:07

+0

包括完美的工作謝謝:) 我只有在不同的目錄級別上使圖像工作的問題。 – Vetaxili 2012-08-09 14:32:03

0

有一個叫做getcwd()的函數將返回當前工作文件夾。如果您在腳本的一開始就調用它,則可以將其存儲在define()的常量中。

define('PROJECT_ROOT', getcwd()); 
3

我通常設置你所提到的,在一個包括目錄中的config.php文件,並在它的下面一行:define('BASE_PATH', str_replace('/include', '', dirname(__FILE__)));(「/包括應任何目錄的config.php文件中,如果你有它的根目錄下,你可以使用define('BASE_PATH', dirname(__FILE__));)當我想包括之後的任何其他文件,我用include_once(BASE_PATH . '/directory/file.php');

注意:這個概念是不是原來我以任何方式

0

要獲得/顯示當前的工作目錄,PHP擁有該

echo getcwd() . "\n"; 

這是一個內置功能會顯示這是目前正在執行你的PHP文件的當前目錄。

0

您還可以更改包括路徑,例如,

$dir = dirname(__FILE__); 
set_include_path($dir . '/../library' . PATH_SEPARATOR . $dir . '/../engine' . PATH_SEPARATOR . get_include_path()); 
相關問題