绝对/相对路径:PHP和HTML之间的根差异

时间:2014-01-28 21:53:40

标签: php html relative-path absolute-path document-root

我目前正在尝试将我的phpBB安装集成到我正在构建的自定义CMS中。 phpBB在其许多函数中依赖于一个名为$phpbb_root_path的变量,它在幕后工作(包含其他PHP等)以及创建前端超链接和图像链接。

phpBB的方法是将以下代码包含在每个php文档中

define('IN_PHPBB', true);

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'forums/';
print_r(dirname(__FILE__));

$phpEx = substr(strrchr(__FILE__, '.'), 1);
require_once( $phpbb_root_path . 'common.' . $phpEx);
require_once($phpbb_root_path . 'includes/functions_display.' . $phpEx);

然后根据文档相对于论坛的位置更改$phpbb_root_path变量。这是一种功能正常的方法,然而我希望通过require_once来包含来自单独的.php文件的代码,以避免我的自定义模板系统出现问题,因此我不这样做必须将相同的代码复制到我拥有的每个文档中。

症状:只要包含文档位于我的文档根目录(其中/ forums /是子目录)中,上述代码(如果包含)将正常工作),但它总会在其他任何地方破坏,或者如果与.htaccess url_rewrite一起使用。

问题:不可能简单地将$phpbb_root_path定义为'/ forums /'或'/〜(USERID)/ forums /',这将是一个明显,简单的解决方案。为什么?因为HTML和PHP视为root(前导斜杠)之间存在差异。

通过打印dirname(__FILE__)我确定我的php安装将/home/(USERID)/public_html/视为root用户。但是,HTML(显然)将WWW.DOMAIN.COM作为root。

你可以想象,这会导致问题:

1)如果我将$phpbb_root_path定义为/home/(USERID)/public_html/,PHP部分(包括等)将起作用,但任何打印HTML的函数都会导致错误,例如<img> s链接到(WWW.DOMAIN.COM)/home/(USERID)/public_html/(link to image)

2)如果我将$phpbb_root_path定义为/forums/,页面根本不会显示,因为PHP将尝试在与“/”相同的级别上找到名为“/ forums /”的目录家/".

问题:是否有一种简单/巧妙的方法可以消除PHP / HTML根文件夹定义之间的差异,例如将PHP根目录调整为/home/(USERID)/public_html/?或者我没有任何选择,只是在每个文档中包含代码,并根据文档的位置使用相对路径?

1 个答案:

答案 0 :(得分:0)

获取页面URL,在斜杠上展开它,计算生成的数组,然后使用该数字确定目录结构的深度,以决定根路径的相对URL