相对路径和嵌套包含
Relative paths and nested includes
我有一个文件 navbar.php,它位于文件夹 views/general 中。它包括一些相对路径文件../controllers/file1.php等..
我只能将 navbar.php 文件包含在同一 views/general 文件夹中的其他文件中。如果我尝试将它包含在该文件之外的文件中,例如 views/signup、
包含在 navbar.php 中的包含路径(../controllers/file1.php 等)将不再相关。
我该如何解决这个问题,以便 navbar.php 可以在任何地方使用?
如果您使用的是 PHP 5.3+:
include __DIR__ . '/relative/path/from/this/file.php';
__DIR__ 是一个魔术常量,保存当前文件的绝对路径。
如果您使用的是 PHP 的早期版本:
include dirname(__FILE__) . '/relative/path/from/this/file.php';
您还可以使用 $_SERVER['DOCUMENT_ROOT']
变量概括网站托管根目录中的所有内容,该变量将是您的 index.php
所在的目录。
使用如下:
include($_SERVER['DOCUMENT_ROOT'] . 'path/from/root/website/location/to/file.php');
我遇到了类似的挑战并创建了一个文件,该文件为我希望能够根据需要调用的所有相关路径定义常量。我在我的所有页面中都包含这个文件(我定义了 $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("pathData.php");
or
include("../pathData.php");
or
include("../../pathData.php);
etc.
所以在你的情况下你可以(取决于你的 pathData 文件在哪里):
include("../pathData.php");
include(MENUDIR . "navbar.php");
etc...
我有一个文件 navbar.php,它位于文件夹 views/general 中。它包括一些相对路径文件../controllers/file1.php等..
我只能将 navbar.php 文件包含在同一 views/general 文件夹中的其他文件中。如果我尝试将它包含在该文件之外的文件中,例如 views/signup、
包含在 navbar.php 中的包含路径(../controllers/file1.php 等)将不再相关。
我该如何解决这个问题,以便 navbar.php 可以在任何地方使用?
如果您使用的是 PHP 5.3+:
include __DIR__ . '/relative/path/from/this/file.php';
__DIR__ 是一个魔术常量,保存当前文件的绝对路径。
如果您使用的是 PHP 的早期版本:
include dirname(__FILE__) . '/relative/path/from/this/file.php';
您还可以使用 $_SERVER['DOCUMENT_ROOT']
变量概括网站托管根目录中的所有内容,该变量将是您的 index.php
所在的目录。
使用如下:
include($_SERVER['DOCUMENT_ROOT'] . 'path/from/root/website/location/to/file.php');
我遇到了类似的挑战并创建了一个文件,该文件为我希望能够根据需要调用的所有相关路径定义常量。我在我的所有页面中都包含这个文件(我定义了 $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("pathData.php");
or
include("../pathData.php");
or
include("../../pathData.php);
etc.
所以在你的情况下你可以(取决于你的 pathData 文件在哪里):
include("../pathData.php");
include(MENUDIR . "navbar.php");
etc...