我正在构建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链接中的链接。
先谢谢
答案 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>