相对路径和嵌套包含

时间:2015-11-03 12:42:39

标签: php html5 relative-path include-path

我有一个文件navbar.php,它位于文件夹视图/常规中。它包括一些相对路径文件../controllers/file1.php等..

我只能将navbar.php文件包含在相同views / general文件夹的其他文件中。如果我尝试将其包含在文件之外的文件中,例如视图/注册,

navbar.php(../controllers/file1.php等)中包含的包含路径将不再相关。

我如何解决这个问题,那么navbar.php可以在任何地方使用吗?

3 个答案:

答案 0 :(得分:4)

我遇到了类似的挑战并创建了一个文件,该文件定义了我希望能够根据需要调用的所有相关路径的常量。我在我的所有页面中都包含了这个文件(我定义了$ urlRoot,以便它可以在所有环境中运行,并可以移动到不同的域等):

文件:pathData.php(为您的示例添加了MENUDIR):

$baseDir = dirname(__DIR__) . '/';
$rootUrl = (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';
define('ROOTURL', $rootUrl);
define('BASEDIR', $baseDir);
define('INCLUDES', $baseDir . 'includes/');
define('INCLUDESURL', ROOTURL . 'includes/');
define('JQUERYURL', ROOTURL . 'includes/jquery/');
define('MENUDIR', ROOTURL . 'views/general/');

然后在每个文件中,我将该文件包含在包含相对目录路径的include中。例如:

include("pathData.php");
or
include("../pathData.php");
or
include("../../pathData.php); 
etc.

所以在你的情况下你可以(取决于你的pathData文件的位置):

include("../pathData.php");
include(MENUDIR . "navbar.php");
etc...

答案 1 :(得分:0)

如果您使用的是PHP 5.3 +

include __DIR__ . '/relative/path/from/this/file.php';

__ DIR__是一个魔术常量,保存当前文件的绝对路径。

如果您使用的是早期版本的PHP

include dirname(__FILE__) . '/relative/path/from/this/file.php';

答案 2 :(得分:0)

您还可以使用$_SERVER['DOCUMENT_ROOT']变量来概括您网站托管的根目录中的所有内容,该变量将是index.php所在的目录。

使用如下:

include($_SERVER['DOCUMENT_ROOT'] . 'path/from/root/website/location/to/file.php');