Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework2 在ZF2中包括外部应用程序_Zend Framework2_Phpbb3 - Fatal编程技术网

Zend framework2 在ZF2中包括外部应用程序

Zend framework2 在ZF2中包括外部应用程序,zend-framework2,phpbb3,Zend Framework2,Phpbb3,我正在尝试将phpBB3(论坛应用程序)与ZF2一起使用。为此,我必须包含一个来自phpBB3的文件。理论上,这很简单: include('/path/to/phpbb3/common.php'); $user->session_begin(); //$user is defined in common.php file 在common.php中定义了很多全局变量,之后需要一些使用这些全局变量的文件。 在ZF2中,简单地包含common.php是不可行的,因为globals的作用域不会跨

我正在尝试将phpBB3(论坛应用程序)与ZF2一起使用。为此,我必须包含一个来自phpBB3的文件。理论上,这很简单:

include('/path/to/phpbb3/common.php');
$user->session_begin(); //$user is defined in common.php file
在common.php中定义了很多全局变量,之后需要一些使用这些全局变量的文件。 在ZF2中,简单地包含common.php是不可行的,因为globals的作用域不会跨越所需的文件,所以我尝试了一个小技巧:

//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。
我怎样才能解决这个问题

>我考虑了2个主要问题:

1。正在加载资源

我不知道你是否更改了phpBB3的代码,因为如果你不更改,你的问题是其他的

Phpbb3和许多系统一样,不允许您直接访问任何文件,您必须通过index.php。正如您在common.php中看到的那样

if (!defined('IN_PHPBB'))

{
    exit;
}
IN_PHPBB是在index.php中定义的,因此您可以简单地使用

另外,common.php和其他文件使用index.php中定义的$phpbb_root_path。 所以,至少,当您要包含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的访问非常重要,因为它不是一个库,维护可能会很棘手,因此如果所有内容都在同一个文件中,然后通过服务管理器创建您自己的内部api,它将更加封装和更好。我想你已经知道怎么做了,如果你不知道,就告诉我


试试这个,告诉我这是否足够或者我们需要更多的研究

不,我没有修改phpbb代码,事实上我确实在phpbb和phpbb_根路径中定义,但为了简单起见,我没有在帖子中包含这些细节。不管怎样,你从“可变范围”中提出的建议正是我所需要的。我会试试看,结果会出来的。谢谢你,卡罗尔!