2014-01-28 64 views
1

我目前正在尝试将我的phpBB安装整合到我正在构建的自定义CMS中。 phpBB在其许多功能中都依赖于一个名为$phpbb_root_path的变量,它在幕后(包括其他PHP等)以及创建前端超链接和图像链接。绝对/相对路径:PHP和HTML之间的根本差异

的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文件中的代码,以避免我的自定义模板系统出现问题,因此我不必将相同的代码复制到每个文档中我有。

症状:上面的代码,如果包含的话,将罚款只要包括文档工作,我文档根目录(其中/论坛/是一个子目录),但它总是会打破其他地方,或者如果与.htaccess url_rewrite一起使用。

问题:它不可能简单地定义为$phpbb_root_path“/论坛/”或“/〜(USERID)/论坛/”,这将是显而易见的,简单的解决方案。为什么?因为HTML和PHP认为是根(主要的斜杠)之间存在差异。

通过打印dirname(__FILE__)我确定我的PHP安装以/home/(USERID)/public_html/为根。但是,HTML(显然)以root身份需要WWW.DOMAIN.COM。

正如你可以想像,这导致问题:

1)如果我定义$phpbb_root_path/home/(USERID)/public_html/,PHP的一部分(包括等)的工作,但打印HTML的任何功能将导致的screwups,像<img>连接到(WWW.DOMAIN.COM)/home/(USERID)/public_html/(link to image)

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

问:是否有一个简单/巧妙的方式通过attuning PHP的根是/home/(USERID)/public_html/删除PHP/HTML根文件夹定义之间的这种差异,例如?或者我没有任何选择,只能在每个文档中包含代码,并根据文档的位置使用相对路径?

+0

phpBB是非常不合时宜的。对于初学者来说,对于初学者来说,使用名称空间和自动加载器以及适当的路由,只需要在站点索引中定义根目录。 [例子](https://github.com/MartyWallace/Tempest/blob/master/index.php) – Marty

回答

0

得到的页面URL,爆炸是在斜线,计算结果数组,然后用这个数字来决定你是如何深入到目录结构来决定的相对URL的根路径

+0

纠正我,如果我错了,但这似乎会''url_rewrite'玩糟糕; PHP仍然可以从执行脚本的真实位置(比如'/ display)开始工作。php'),而页面URL可能完全不同(像'/ articles/article-1 /'),从而再次产生差异。 – ividyon

+0

我认为使用$ _SERVER ['REQUEST_URI']将返回原始URI而不是重写的 – Eeji

+0

它不会;这仍然会破坏使用url_rewritten链接上的根路径变量的HTML。 – ividyon