包含phpBB代码时的相对路径问题


Relative path issue when including phpBB code

我目前正在制作一个与phpBB论坛融合的网站。根据phpBB3会话集成的官方解决方案,我使用了以下代码来包含phpBB安装中的相关文件:

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'forums/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

我的论坛文件夹是(根路径)/forums/,所以只要执行脚本在域的根文件夹中,这就可以完美地工作。然而,如果我试图从另一个文件夹中包含此代码,它会抛出以下错误:

[phpBB Debug]PHP警告:在文件中/第5行的home/unirealsp/public_html/included/phpbb.php:include(forums/common.php)[function.include]:无法打开流:没有这样的文件或目录[phpBB Debug]PHP警告:在文件中/第5行的home/unirealsp/public_html/included/phpbb.php:include(forums/common.php)[function.include]:无法打开流:没有这样的文件或目录[phpBB Debug]PHP警告:在文件中/home/universp/public_html/includs/phpbb.php第5行:include()[function.include]:无法打开"forums/common.php"进行包含(include_path='.:/usr/lib/php:/usr/local/lib/php')[phpBB调试]php警告:在第行的文件/home/unirealsp/public_html/included/phpbb.php中6:include(forums/includes/functions_display.php)[function.include]:无法打开流:没有这样的文件或目录[phpBB Debug]PHP警告:在第行的文件/home/unirealsp/public_html/included/phpbb.php中6:include(forums/includes/functions_display.php)[function.include]:无法打开流:没有这样的文件或目录[phpBB Debug]PHP警告:在第行的文件/home/unirealsp/public_html/included/phpbb.php中6:include()[function.include]:打开失败用于包含的'forums/includes/functions_display.php'(include_path='.:/usr/lib/php:/usr/local/lib/php')

我的解决方案尝试如下:

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

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

但这只是在从域根运行时破坏了它,而不是修复它,这也是我不理解的。

如何从服务器上的任何位置可靠地包含我的phpBB代码?

附录:我目前正在为我的网络空间使用一个临时URL,它由一个带有用户文件夹的URL组成,比如http://XXX.XXX.XXX.XXX/~user/。然而,将变量更改为"/~user/forums/"也没有起作用。

我的网站也遇到了同样的问题,我通过获取页面的URL并在每个斜杠处分解它来解决这个问题。然后,我在分解的数组中使用count(),它告诉页面在目录结构中的深度,并使用该数字将所需数量的../"向上一个目录"添加到根路径。

由于我在谷歌上搜索到这个问题,我想指出$phpbb_root_path与URL无关!它与phpBB安装目录的文件系统路径有关,相对于当前正在执行的PHP脚本(预期为"PHP文件")。在一个非常基本的场景中,你可以忽略差异,但当mod_rewrites出现时,以正确的方式进行操作很重要。

由于我需要快速解决这个问题,我用这样一个可怕的问题(SiteDir是一个常量,定义为指向我的站点根的路径,即/user/site/):

    $dai=$_SERVER["SCRIPT_FILENAME"];
    $dai2=str_ireplace("''", "/", SiteDir);
    $dai=str_ireplace($dai2, "", $dai);
    $depth=substr_count($dai, "/");
    $dai="";
    for($i=0; $i<$depth; $i++)
        { $dai="../"; }
    $dai.="forum/";
    $phpbb_root_path=$dai;

还要关注我在phpBB支持论坛上打开的这个帖子,了解更多"官方"的工作方式。