2010-09-07 76 views
1

我在根目錄下的index.php文件問題:PHP需要與 「./」

<?php 
require_once "./include/common.php"; 
?> 

,並在文件中的common.php包括文件夾:

<?php 
require_once "globalConfig.php"; 
?> 

文件globalConfig在同一common.php文件夾。樹文件夾:

XXX/index.php文件

XXX /包括/的common.php

XXX /包括/ globalConfig.php

index.php的正常運行。但是,如果我更改文件的common.php爲:

<?php 
require_once "./globalConfig.php"; 
?> 

PHP顯示一個警告,它無法找到globalConfig.php文件。有什麼不同?我認爲在「./」的情況下,最外面的包含文件(index.php)會在當前目錄中找到globalConfig.php。

+1

另請參閱http://stackoverflow.com/questions/1395909/php-include-all-paths-get-messed-up,http://stackoverflow.com/questions/3429780/include-and-path-problem ,以及搜索「php包含路徑」的其他許多問題:) – 2010-09-07 10:43:09

回答

3

在你的index.php添加

define('BASE_PATH',str_replace('\\','/',dirname(__FILE__))); 

然後的common.php內包括像這樣。只要您使用BASE_PATH alsways從你的htdocs,即index.php文件的根目錄包括

require_once BASE_PATH . '/includes/globalConfig.php'; 

這將找到的確切路徑和standerize斜線,然後。

+0

感謝,它是一個聰明的解決方案:) – coolkid 2010-09-07 10:40:43

+0

由於str_replace將反斜槓轉換爲斜槓以削減它的windows和linux compat,所以我在每個項目中都使用它。不客氣。 – RobertPitt 2010-09-07 10:48:23

1

我相信路徑(即「./」)是相對於BASE腳本,而不是它所包含的文件。出於這個原因,我通常在包含腳本時使用絕對路徑。

1

該路徑相對於當前工作目錄;在web上下文(php-cgi)中,這是最初調用的腳本(直接啓動而不是通過include)所在的目錄。 一個簡單的解決方法:

require_once dirname(__FILE__) . '/foobar.inc.php';