我目前正在尝试将我的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/
?或者我没有任何选择,只是在每个文档中包含代码,并根据文档的位置使用相对路径?
答案 0 :(得分:0)
获取页面URL,在斜杠上展开它,计算生成的数组,然后使用该数字确定目录结构的深度,以决定根路径的相对URL