当前位置: 首页 > 知识库问答 >
问题:

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

孙翰墨
2023-03-14

我目前正在制作一个与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警告:在文件/home/unrealsp/public _ html/includes/phpBB . PHP第5行:include(forums/common . PHP)[function . include]:打开流失败:没有这样的文件或目录[phpBB Debug] PHP警告:在文件/home/unrealsp/public _ html/includes/phpBB . PHP第5行:include(forums/common . PHP)[function . include]:打开流失败:没有这样的文件或目录[phpBB Debug] PHP:/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/includes/include:/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/.但是,将变量更改为“/~用户/论坛/”也不起作用。

共有2个答案

田冥夜
2023-03-14

因为我发现这个问题是在谷歌上搜索到的,所以我想指出$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支持论坛上发表的这个帖子,以获得更多的“官方”方法来使它工作。

钮誉
2023-03-14

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

 类似资料:
  • 问题内容: 我有/root/update/test.php文件。还有一个文件/root/connect.php; 该文件有一行 在/root/update/test.php中。有代码 当我运行/root/update/test.php时,它找到connect.php,但是找不到config.php,这给了我 这让我感到困惑,因为这些警告使我似乎似乎在正确地进行所有操作-包含路径为/ root,并且

  • 问题内容: 我在理解有关PHP相对包含路径的规则集时遇到了麻烦。如果我运行文件A.PHP-,文件A.PHP包含文件B.PHP,其中文件C.PHP,则C.PHP的相对路径应该与B.PHP的位置有关,还是与A的位置有关.PHP?也就是说,从哪个 文件 调用include或仅从当前工作目录是什么以及确定当前工作目录的文件有关系吗? 问题答案: 它相对于主脚本,在本例中是A.php。请记住,只是将代码插入

  • 我正在设置并配置哪些字体可用于Apache FOP,并希望使用相对路径而不是绝对路径: 有没有可能将渲染器中字体目录设置为使用相对路径? 或者可以以编程方式设置它,在这种情况下,我可以利用 获取完整路径?

  • 问题内容: 所以这是我的程序,可以正常工作: 如您所见,我正在使用我要读取的文件的绝对路径: 当我尝试使用相对路径时会出现问题: 我收到一个错误: 文件usnumbers.txt与ScanSum.class文件位于同一目录中: 我该如何解决? 问题答案: 从哪个目录执行该类文件?(这将是相对路径的当前工作目录和基本目录。) 如果仅从eclipse启动应用程序,则项目目录将是工作目录,在这种情况下,

  • 本文向大家介绍解决vue单页面应用打包后相对路径、绝对路径相关问题,包括了解决vue单页面应用打包后相对路径、绝对路径相关问题的使用技巧和注意事项,需要的朋友参考一下 在项目开发过程中,在部署过程中,用到了反向代理,这就要求前端代码中不能使用绝对路径。但是我们知道,一般情况下,通过webpack+vuecli默认打包后的HTML、css、js等文件,使用的都是绝对路径。下面可以举几个例子来看一下:

  • 问题内容: 我将Maven约定用于源路径(src / main src / test),并且我的sql脚本位于src / main / resources / scripts中。 我想用H2内存运行我的应用程序,我想使用jdbc url初始化我的数据库: 我的问题是,这个相对路径(src / main / …)不起作用,并且如果init = runscript命令什么都没有针对,则H2不会崩溃。