【问题标题】:Relative path issue when including phpBB code包含 phpBB 代码时的相对路径问题
【发布时间】:2013-12-21 11:11:37
【问题描述】:

我目前正在制作一个与 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 调试] PHP 警告:在文件中 /home/unrealsp/public_html/includes/phpbb.php 在第 5 行: 包括(论坛/common.php)[function.include]:无法打开流: 没有这样的文件或目录 [phpBB 调试] PHP 警告:在文件中 /home/unrealsp/public_html/includes/phpbb.php 在第 5 行: 包括(论坛/common.php)[function.include]:无法打开流: 没有这样的文件或目录 [phpBB 调试] 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 调试] PHP 警告:在文件 /home/unrealsp/public_html/includes/phpbb.php 在线 6:包含(论坛/包含/functions_display.php)[function.include]: 无法打开流:没有这样的文件或目录 [phpBB 调试] PHP 警告:在文件 /home/unrealsp/public_html/includes/phpbb.php 在线 6:包含(论坛/包含/functions_display.php)[function.include]: 无法打开流:没有这样的文件或目录 [phpBB 调试] PHP 警告:在文件 /home/unrealsp/public_html/includes/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/' 也不起作用。

【问题讨论】:

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


    【解决方案1】:

    由于我在谷歌上搜索了同样的问题,我想指出 $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;
    

    还请关注this thread I opened on the phpBB support forum 以了解更多“官方”方法来使其发挥作用。

    【讨论】:

      【解决方案2】:

      我的网站遇到了同样的问题,我通过获取页​​面的 URL 并在每个斜线处爆炸它来解决这个问题。然后我在分解的数组上使用了count(),它告诉我页面的目录结构有多深,并使用该数字将所需的../ 'up a directory' 数量添加到根路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-30
        • 1970-01-01
        • 2020-01-03
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多