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

时间:2013-12-04 19:34:44

标签: php include relative-path phpbb document-root

我目前正在制作一个与phpBB论坛融合的网站。在official solution to phpBB3 Sessions Integration之后我使用以下代码来包含我的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/unrealsp/public_html/includes/phpbb.php:   include(forums / common.php)[function.include]:无法打开流:   没有这样的文件或目录[phpBB Debug] PHP警告:在文件中   第5行的/home/unrealsp/public_html/includes/phpbb.php:   include(forums / common.php)[function.include]:无法打开流:   没有这样的文件或目录[phpBB Debug] PHP警告:在文件中   /home/unrealsp/public_html/includes/phpbb.php第5行:include()   [function.include]:无法打开'forums / common.php'以包含   (include_path ='。:/ usr / lib / php:/ usr / local / lib / php')[phpBB Debug] PHP   警告:在文件/home/unrealsp/public_html/includes/phpbb.php上线   6:include(forums / includes / functions_display.php)[function.include]:   无法打开流:没有这样的文件或目录[phpBB Debug] PHP   警告:在文件/home/unrealsp/public_html/includes/phpbb.php上线   6:include(forums / includes / functions_display.php)[function.include]:   无法打开流:没有这样的文件或目录[phpBB Debug] PHP   警告:在文件/home/unrealsp/public_html/includes/phpbb.php上线   6:include()[function.include]:打开失败   'forums / includes / functions_display.php'包含在内   (include_path中= ':/ usr / lib中/ PHP:在/ usr /本地/ 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代码?

附录:我目前正在为我的网站空间使用一个临时网址,该网址由一个带有用户文件夹的网址组成,例如http://XXX.XXX.XXX.XXX/~user/。但是,将变量更改为“/ ~user / forums /”也不起作用。

2 个答案:

答案 0 :(得分:1)

我的网站遇到了同样的问题,我通过获取网页的网址并在每个网格中将其展开来解决。然后我在爆炸数组上使用count(),它告诉我页面的目录结构有多深,并使用该数字将所需数量的../'上一个目录'添加到根路径。< / p>

答案 1 :(得分:1)

由于我发现这个问题谷歌搜索同样的问题,我想指出$ phpbb_root_path与URL无关!它与phpBB安装目录的文件系统路径有关,相对于当前正在执行的PHP脚本(意图为&#34; PHP文件&#34;)。在一个非常基本的场景中,你可以忽略差异,但是当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;

另请关注this thread I opened on the phpBB support forum以获取更多&#34;官方&#34;如何使它发挥作用。