Проблема относительного пути при включении кода phpBB

В настоящее время я делаю сайт, который объединен с форумом 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 Отладка] Предупреждение PHP: в файле /home/unrealsp/public_html/include/phpbb.php в строке 5: include () [function.include]: не удалось открыть файл "forum / common.php" для включения (include_path='.: / usr / lib / php: / usr / local / lib / php ') [phpBB Debug] PHP Предупреждение: в файле /home/unrealsp/public_html/includes/phpbb.php в строке 6: include (форумы / include /functions_display.php) [function.include]: не удалось открыть поток: нет такого файла или каталога [phpBB Debug] PHP Предупреждение: в файле /home/unrealsp/public_html/include/phpbb.php в строке 6: include(forums/includes/functions_display.php) [function.include]: не удалось открыть поток: такого файла нет или каталог [phpBB Debug] Предупреждение PHP: в файле /home/unrealsp/public_html/include/phpbb.php в строке 6: include() [function.include]: не удалось открыть "форумы / include /functions_display.php" для включения (include_path=': / USR / Библиотека / PHP: / USR / местные / Библиотека / 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/' также не сработало.

2 ответа

Решение

У меня была та же проблема с моим сайтом, которую я решил, получив URL страницы и взорвав ее при каждом слэше. Я тогда использовал count() в разобранном массиве, который говорит мне, насколько глубоко в структуру каталогов страницы и использовал это число, чтобы добавить необходимое количество ../ "до каталога" до корневого пути.

Так как я нашел этот вопрос Googling для той же самой проблемы, я хотел бы отметить, что $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 для более "официальных" способов заставить ее работать.

Другие вопросы по тегам