2013-12-13 5 views
0

Я пытаюсь использовать phpBB3 (приложение для форума) вместе с ZF2. Для этого я должен включить файл из phpBB3. В теории это так просто, как:Включая внешнее приложение в ZF2

include('/path/to/phpbb3/common.php'); 
$user->session_begin(); //$user is defined in common.php file 

В common.php много глобалов определены, и после этого необходимы некоторые файлы, которые используют эти глобалам. В ZF2 просто в том числе в common.php не будет работать, потому что сфера глобал не будет развернута на нужные файлы, поэтому я попытался немного трюка:

//in Application/Forum/Service 

public function callForumAPI(){ 
    $zf_dir = getcwd(); 
    chdir('/var/www/html/phpBB3'); 

    include('common.php'); 
    $user->session_begin(); 

    chdir($zf_dir); 
} 

Ни в этом случае объем глобального переменные не охватывали требуемые файлы, поэтому все глобальные переменные, где NULL в этих файлах. Как я могу решить эту проблему?

ответ

1

Я считаю 2 основные проблемы:

1. Загрузка ресурсов

Я не знаю, если вы изменили код phpBB3, так как если вы не делаете, то ваша проблема другая.

Phpbb3, как и многие системы, не позволяет вам напрямую обращаться к любому файлу, вам нужно пройти через index.php. Как вы можете видеть в common.php

if (!defined('IN_PHPBB')) 

{ 
    exit; 
} 

IN_PHPBB определяется в index.php, так что вы можете просто использовать

Кроме того, common.php и другие файлы, делает использование $ phpbb_root_path, что определяется в index.php. Так, по крайней мере, когда вы собираетесь включить common.php вам нужно

$zf_dir = getcwd(); 
chdir('/var/www/html/phpBB3'); 

define('IN_PHPBB', true); 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './'; 

include('common.php'); 
... 

chdir($zf_dir); 

вероятно, есть и другие вещи, которые вы должны заботиться о.

2. Переменные прицелы

Кроме того, подумайте, чем в PHP, как и почти на всех языках, переменная, объявленная внутри функции, считается локальным, и будет определено вне этой функции. Так что, если вы сделаете это внутри callForumAPI(), у вас не будет какой-либо переменной снаружи, и, кроме того, в зависимости от того, где вы делаете это, это может быть фактически внутри функции, независимо от того, можете ли вы ее заметить или нет , так как ZF2 представляет собой каркасную работу со сложной архитектурой без овуаций.

Итак, я рекомендую, как только вы загрузите файл, использовать диспетчер служб ZF2 для хранения всех переменных и объектов, которые вы использовали бы в своем приложении. Это хорошая мера, даже если вам это не нужно, так как таким образом вы можете максимально интегрировать все, что важно, чтобы минимизировать и локализовать доступ к phpbb3, поскольку он не предназначен для библиотеки, обслуживание может быть сложным , поэтому, если все пользователи находятся в одном файле, а затем вы создаете свой собственный внутренний api через диспетчера служб, он будет более инкапсулирован и лучше. Я полагаю, вы уже знаете, как это сделать, если вы этого не сделаете, просто дайте мне знать.

попробовать это, и скажите мне, если его достаточно или нам нужно больше исследований

+0

Нет, я не изменил код PHPBB, и в действительности я определить IN_PHPBB и PHPBB_ROOT_PATH, но для простоты я не включал эти детали в сообщении. В любом случае, ваши предложения из «Области переменной» - это именно то, что мне нужно. Я попробую их и вернусь с результатом. Спасибо, Кэролс! – sica07

Смежные вопросы