包含使用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
第一关:我会放下DS,它的BS(EHE)。 Windows支持C:/wamp/www
和C:\wamp\www
:-)即使C:\wamp\www/project
也没问题。
如果includes.php
位于,说lib/includes.php
(相对于项目的根),然后执行以下操作:
define('SITE_ROOT', realpath('../'));
,将动态设置SITE_ROOT
。
两个建议在这里:
你会想
SITE_ROOT
是你的文件所在目录的绝对路径例如,在上面的代码中,这个目录是C:\wamp\www\ArmyCreator
。如果您知道该目录,则可以手动定义,或者使用预定义的__DIR__
常量(PHP 5.3+)动态定义,或者如果您还不是5.3,则可以使用dirname(__FILE__)
。在一般认为不好的做法中一次包括一堆文件,应该使用自动加载。这将为您提供更好的性能以及定义明确的目录布局和命名方案,从而实现更好的代码。为此,您可以使用
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
不幸的是IDE不喜欢变量路径:( – confiq 2011-01-19 16:15:32
或`__DIR__`,因为PHP 5.3.0。 – 2011-01-19 16:32:04
我不使用5.3呢。@dorkitude。我用这一点,但我看不到它是否工作,因为我意识到我用require_once(“../../ includes/helper/initialize.php”)所做的所有表达式都不起作用 – Pillblast 2011-01-19 16:36:40