2010-09-07 71 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';