包含使用PHP相对路径的文件?

包含使用PHP相对路径的文件?

问题描述:

在开发我的网站时,我通过调用一个名为includes的单个文件来调用我的php文件中的所有包含。包含使用PHP相对路径的文件?

这个文件的代码看起来somethig这样的:(我适应它从林达教程)

defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR); 

defined('SITE_ROOT') ? null : 
    define('SITE_ROOT', 'C:'.DS.'wamp'.DS.'www'.DS.'ArmyCreator'); 

defined('LIB_PATH') ? null : define('LIB_PATH', SITE_ROOT.DS.'includes'); 
defined('PUB_PATH') ? null : define('PUB_PATH', SITE_ROOT.DS.'public'); 


// load config file first 
require_once(LIB_PATH.DS."helper".DS.'config.php'); 

现在因为我部署我的网站我无法弄清楚如何声明SITE_ROOt使它工作正常吗?

编辑

这是正常的这样的代码:require_once("../../includes/helper/initialize.php");一旦我部署到网站不再工作?

您可以通过执行包括文件相对于includes.php的目录:

<? 
$basePath = dirname(__FILE__); 
require_once($basePath . "relative/path/from/basePath"); // replace the string with your real relative path 
+0

不幸的是IDE不喜欢变量路径:( – confiq 2011-01-19 16:15:32

+0

或`__DIR__`,因为PHP 5.3.0。 – 2011-01-19 16:32:04

+0

我不使用5.3呢。@dorkitude。我用这一点,但我看不到它是否工作,因为我意识到我用require_once(“../../ includes/helper/initialize.php”)所做的所有表达式都不起作用 – Pillblast 2011-01-19 16:36:40

第一关:我会放下DS,它的BS(EHE)。 Windows支持C:/wamp/wwwC:\wamp\www :-)即使C:\wamp\www/project也没问题。

如果includes.php位于,说lib/includes.php(相对于项目的根),然后执行以下操作:

define('SITE_ROOT', realpath('../')); 

,将动态设置SITE_ROOT

两个建议在这里:

  1. 你会想SITE_ROOT是你的文件所在目录的绝对路径例如,在上面的代码中,这个目录是C:\wamp\www\ArmyCreator。如果您知道该目录,则可以手动定义,或者使用预定义的__DIR__常量(PHP 5.3+)动态定义,或者如果您还不是5.3,则可以使用dirname(__FILE__)

  2. 在一般认为不好的做法中一次包括一堆文件,应该使用自动加载。这将为您提供更好的性能以及定义明确的目录布局和命名方案,从而实现更好的代码。为此,您可以使用spl_autoload_register()函数。

首先,不要滥用这样的三元语法。取而代之的defined('DS') ? null : define('DS', DIRECTORY_SEPARATOR);,你可以使用OR操作(这将在一个true结果短路):

defined('DS') OR define('DS', DIRECTORY_SEPARATOR); 

其次,如果这是你知道的位置的引导文件,里面简单地使用dirname(__FILE__)

defined('SITE_ROOT') OR define('SITE_ROOT', dirname(__FILE__)); 

否则,如果你知道root的相对位置,您可以使用多个dirname电话。所以,如果这是当前一个的父目录:

defined('SITE_ROOT') OR define('SITE_ROOT', dirname(dirname(__FILE__))); 

不要使用$_SERVER['DOCUMENT_ROOT']cwd()或硬编码的路径。始终使用dirname(__FILE__)来确定绝对路径。有关为什么更多信息,请参阅This Answer