Проблема относительного пути при включении кода 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 для более "официальных" способов заставить ее работать.