使用PHP包含在子目录中时的相对路径问题

时间:2015-08-06 06:19:26

标签: php .htaccess absolute relative

我正在构建PHP应用程序的过程中。应用程序本身有大量页面,因此我决定将每个文件分类到相应的子目录中。

但是我遇到了一个问题。所有模板资源文件夹(CSS,JS,Images等)都位于根文件夹Vancouver中。以及导航菜单(localhost/appname/)。我在每个页面都包含了菜单。

当我尝试将navmenu.php包含在子目录中的文件中时出现问题。

当我在navmenu.php中包含navmenu.php时(两者都在根文件夹中)效果很好。但是当我在学生子目录中的addstudent.php中包含index.php时,navmenu.php中的所有navmenu.php链接都变为student / * .php(相对链接)

解决此类情况的正确方法是什么? 我有一个包含在所有php文件中的配置文件。我该如何创建常量..

以及如何更新a href href链接中的链接。

先谢谢

3 个答案:

答案 0 :(得分:2)

无论目录深度如何,始终包含它,请尝试以下

include $_SERVER['DOCUMENT_ROOT'] . "/includes/navmenu.php";

这应该返回类似于:/home/<user>/public_html/includes/navmenu.php

的内容

在我的大多数项目中;我也有类似的设置文件:

$LiveDir = "http://localhost/project";
$RootDir = "/home/user/public_html/project";

这在更改主机名时非常有用,因为您只需更改一个文件中的链接,而不是浏览所有页面并更新链接

<a href='<?=$LiveDir?>/some/directory/index.php'>Some Link</a>

我使用类似的设置在我的工作和我家之间的巨大CRM上工作。如果我在家,链接会以http://127.0.0.1/为前缀,当我在工作时会自动转换为http://192.168.10.23/Matilda

  

警告:在cron作业期间不会填充 $ _ SERVER 。解决方法:

创建一个文件:CronMgr.php(例如),其中包含内容并将您的cron作业指向它。:

<?php file_get_contents("/full/path/to/the/script.php"); ?>

这将打开一个实例,其中$_SERVER 已填充,脚本将毫无问题地运行。

答案 1 :(得分:0)

在这种情况下,我将定义一个包含项目根目录路径的常量,并包含与之相关的所有内容。这可以让你避免做相对路径包含。

e.g。确保为所有页面加载此内容。例如一般的conf文件或一般的index.php。我不知道你是如何设置的。 (或者使用其他地方指出的$_SERVER['DOCUMENT_ROOT']

define('PROJECT_ROOT','/localhost/appname/');

然后在其他地方

include(PROJECT_ROOT . 'navmenu.php');

答案 2 :(得分:0)

这是浏览器的正常行为。 要解决您的问题,有两种方法: 1.与&#39; /&#39;开始链接,即&#39; /index.php' ;,&#39; /about.php'这使浏览器从网站的根目录创建网址。 2.使用PHP编写navmenu.php中页面的完整路径:

$rootPath = 'http://example.com/';
<a href="<?php echo $rootPath; ?>">Home</a>
<a href="<?php echo $rootPath.'/about.php'; ?>">About</a>