2013-12-13 29 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

我考慮兩個主要問題:

1.裝載資源

我不知道你是否改變。中文的代碼,因爲如果你不,你的問題是其他。

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是一個複雜的,非obvius架構框架。

所以,我建議,只要您加載文件,就是使用ZF2服務管理器來存儲所有變量和對象,而不是在應用程序中使用它。即使你不需要它,這也是一個很好的措施,因爲這樣你可以儘可能地集成所有的東西,所以儘量減少和本地化對phpbb3的訪問是很重要的,因爲它不是一個庫,維護可能會很棘手,所以如果everyhing在同一個文件中,然後通過服務管理器創建自己的內部API,它將更加封裝和更好。我假設你已經知道如何做到這一點,如果你不知道,就讓我知道。

試試這個,如果告訴我它的不足或我們需要更多的研究

+0

不,我沒有修改PHPBB代碼,並在現實中我也明確IN_PHPBB和PHPBB_ROOT_PATH,但爲了簡單起見我不包括這些帖子中的細節。無論如何,來自「可變範圍」的建議正是我所需要的。我會嘗試他們,並返回結果。謝謝Carols! – sica07

相關問題