Относительный путь при включении кода phpBB

В настоящее время я создаю сайт, который сливается с форумом phpBB. После официального решения интеграции phpBB3 Sessions я использовал следующий код для включения соответствующих файлов из моей установки 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);

Моя папка форума (корневой путь)/форумы/, поэтому это работает отлично до тех пор, пока исполняемый скрипт находится в корневой папке домена. Однако, если я попытаюсь включить этот код из другой папки, он выдает следующую ошибку:

[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 Предупреждение: в файле /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 Warning: в файле /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]: Не удалось открыть "форумы/includes/functions_display.php" для включения ( include_path = ': /USR/Library/PHP: /USR/локальные /Library/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, для более "официальных" способов заставить его работать.

licensed under cc by-sa 3.0 with attribution.