正确的路径文件在常量中使用,因此可以在任何服务器上使用

时间:2014-03-10 00:14:34

标签: php include constants

我有一个小项目,但我猜这适用于任何规模。由于我只有2个班级,我认为自动加载可能有点过分,可能在这里不太相关。

我想要实现的是,如果我需要将其转移到另一个服务器或文件夹,它将兼容并且不需要我在整个网站中编辑一堆链接以使其正常工作。

所以我有一个名为config.php的常量文件,我把它放在了类文件夹

define('CONST_INT_PATH', $_SERVER['DOCUMENT_ROOT']);
define('CONST_ROOT_PATH', 'http://www.mysite.com');
define('CONST_PROJECT_PATH', CONST_ROOT_PATH.'/website');

define("CONST_IMAGE_PATH", CONST_PROJECT_PATH.'/images/');
define("CONST_CLASSES_PATH", CONST_PROJECT_PATH.'/classes/');
define("CONST_INCLUDE_PATH", CONST_PROJECT_PATH.'/includes/');
define("CONST_JS_PATH", CONST_PROJECT_PATH.'/js/');
define("CONST_CSS_PATH", CONST_PROJECT_PATH.'/css/');

因此,项目的根,即var / www等同于www.mysite.com和网站var / www / website的子文件夹,即www.mysite.com/website

说实话我有点迷失,在某些使用CONST_INT_PATH的部分工作正常,其他地方我必须使用CONST_PROJECT_PATH并使用完整的url路径。我认为后者可能是更好的选择,但我不确定。

有没有更好的方法可以在所有情况下使用

我现在用这样的东西:

include CONST_INCLUDE_PATH.'header.php';
include CONST_INCLUDE_PATH.'footer.php';
<img src="<?php echo CONST_PROJECT_PATH;?>logo.png" />

所以我的问题是哪一个是正确的使用方法还是有更好的方法

define('CONST_INT_PATH', $_SERVER['DOCUMENT_ROOT']);
define('CONST_ROOT_PATH', 'http://www.mysite.com');
define('CONST_PROJECT_PATH', CONST_ROOT_PATH.'/website');

我看到奇怪的问题包括不加载即使如果我回应了包含并粘贴在网址中我可以看到它所以我希望它可能是因为我目前使用的方法是有缺陷的

例如,如果我使用:

include 'includes/header.php';

工作正常,但如果我这样做:

include 'http://www.mywebsite.com/website/includes/header.php';
即使我知道这是正确的道路,它也不会工作。所以我猜我需要放弃http://路由并以不同的方式到达路径

2 个答案:

答案 0 :(得分:1)

好的,所以我让它工作,这种方法可能无法达到我想要的长期但它似乎工作。我还没完全明白为什么。

如果我在配置文件中使用它:

define('CONST_ROOT_PATH', $_SERVER['REQUEST_URI']);
define('CONST_PROJECT_PATH', dirname(__FILE__));

define("CONST_IMAGE_PATH", CONST_ROOT_PATH.'/images');
define("CONST_CLASSES_PATH", CONST_PROJECT_PATH.'/classes');
define("CONST_INCLUDE_PATH", CONST_PROJECT_PATH.'/includes');
define("CONST_JS_PATH", CONST_ROOT_PATH.'/js');
define("CONST_CSS_PATH", CONST_ROOT_PATH.'/css');

奇怪的是,CONST_PROJECT_PATH适用于类和包含但由于某种原因它不适用于js和css文件。即使所有这些文件夹都在同一目录中,使用CONST_ROOT_PATH使用$ _SERVER ['REQUEST_URI']使css和js工作,基本上返回/ website而不是var / www / website /

答案 1 :(得分:0)

不,我们有配置文件的原因是我们只能在跨不同环境传输代码时编辑那个文件。设置Doc根目录,所有文件路径都应该来自该设置。然后,您需要做的就是根据环境更改doc root设置。