Хорошо, это немного сложно, так что несите меня.Что такое «правильный» метод интеграции приложения Zend2 с аутентификацией PHPBB3?
Я запускаю форум PHPBB в течение некоторого времени, и моя цель - создать PHP-приложение Zend2 с использованием его функций администрирования и аутентификации пользователей вместо создания полностью нового компонента авторизации, который, в свою очередь, должен синхронизироваться с Форум снова.
Следующие компоненты будут использоваться в живой среде: PHPBB3, Zend Framework 2 (последняя стабильная версия), Apache, PHP 5.6+, MySQL, работающая на виртуальном Linux-сервере без корневого доступа.
My Development Environment (работает все примеры ниже): PHPbb3, Zend Framework 2 (последняя стабильная), XAMPP 3.2.2, PHP 5.6.21 с Xdebug включена, MariaDB работает на Windows 8.
Всякий раз, когда интеграция PHPBB просят следующие строки неизбежно оказаться в поисках:
global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template;
define('IN_PHPBB', true);
$phpbb_root_path = './forum/phpBB3/'; // this path is from an external example
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$phpBBFile = $phpbb_root_path . 'common.' . $phpEx;
include($phpBBFile);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
Я уже имел успех в том числе без использования рамки или по телефону PHP непосредственно через AJAX, но теперь - с помощью Zend Framework, 2 - возникает множество проблем, возникающих при включении n агрессивный код PHPBB3.
Должен сказать, что я не опытный программист на PHP, и я узнал о Zend всего пару дней.
Моя первая попытка сосредоточены на интеграции выше код перед Zend Application вызывается в Zends index.php
:
....
// Setup autoloading
require 'init_autoloader.php';
global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template;
define('IN_PHPBB', true);
$phpbb_root_path = 'public/forums/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$phpBBFile = $phpbb_root_path . 'common.' . $phpEx;
include($phpBBFile);
// Run the application!
Zend\Mvc\Application::init(require 'config/application.config.php')->run();
....
В результате в этой ошибки:
Catchable fatal error: Argument 1 passed to Zend\Stdlib\Parameters::__construct() must be of the type array, object given, called in C:\xampp\htdocs\myZendApp\vendor\zendframework\zend-http\src\PhpEnvironment\Request.php on line 72 and defined in C:\xampp\htdocs\myZendApp\vendor\zendframework\zend-stdlib\src\Parameters.php on line 24
Так вызывая PHPBB это рано, кажется, беспорядок Zend в плохом смысле, я перешел к другим реализациям.
Мой одобренный дизайн будет включать в себя отдельный модуль аутентификации аутентификации, который обрабатывает аутентификацию PHPBB и доступен как услуга для всех маршрутов и их контроллеров. Включение и вызов скриптов phpbb, однако, приводит к различным проблемам, вероятно, связанным с интенсивным использованием глобальных переменных.
Вот несколько примеров кода из checkAction
в PhpbbAuthController
:
public function checkAction(){
global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template;
define('IN_PHPBB', true);
$phpbb_root_path = 'public/forums/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
$phpBBFile = $phpbb_root_path . 'common.' . $phpEx;
include($phpBBFile);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
$response = array();
if ($user->data['user_id'] == ANONYMOUS) {
$response['loginState'] = "logged_out";
} else {
$response['loginState'] = "logged_in";
}
return new ViewModel($response);
}
И здесь ошибка от выполнения session_begin()
Fatal error: Call to a member function header() on null in C:\xampp\htdocs\myZendApp\public\forums\phpbb\session.php on line 228
После отладки в него, казалось, что все ссылки на запрос $ и $ symfony_request внутри этих функций аутентификации, где NULL.
После того, как я потратил много времени на то, чтобы выполнить сценарии из контекста Zend, я поставил глаза на способ выполнения сценариев в отдельном контексте. Самый простой способ, который пришел мне на ум, состоял в том, чтобы вызвать скрипт из HttpClient
и использовать текст результата для управления моей службой аутентификации. Для этого мне нужно будет извлечь файл cookie сеанса из вызываемых скриптов и сохранить его для использования в приложении Zend.
Если я направляю скрипты через Zend Framework, я, кажется, снова сталкиваюсь с той же проблемой (с кодом PHBB в контроллере Zend), поэтому я не могу использовать маршрутизацию Zends для доступа к ним. Поскольку я использую http-запрос, я должен хранить сценарии в общедоступном каталоге или в его подкаталоге.
И вот где я сейчас. Внутренний вызов php-файлов, которые используют PHPBB, отлично работает сам по себе, но используемый мной HttpClient
(из класса Zend Controller для настоящего) запускает тайм-аут на каждом шагу, который я сформулировал в другом вопросе здесь: Zend 2 Http Client Request times out when requesting php file from localhost/public directory.
Буду признателен за ваши мнения, советы и возможную архитектуру или даже частичное решение моих проблем, упомянутых выше.
То, что я не хочу делать ни при каких обстоятельствах, заключается в том, чтобы придумать мою собственную аутентификацию и администрирование пользователей, поскольку она всегда будет уступать сложной, но проверенной системе, которая уже находится в PHPBB, и в конечном итоге приводит к проблемам безопасности. Также приложение Zend считается «Дополнительным», так как Форум является ядром сайта, так как сейчас ситуация стоит.
Большое спасибо за ваше время и запросите дополнительную информацию. (Я не мог включить весь код, и я не знаю, что еще будет для вас актуальным на данный момент)
Если я полностью не в курсе, что я хочу сделать, мне также понравятся ваши отзывы. У меня очень ограниченные ресурсы в моем распоряжении, что является моей самой насущной причиной для попыток включить существующее решение в мое приложение. – elfwyn
Пожалуйста, просмотрите мой ответ ниже. Я думаю, вы найдете это полезным. – vpassapera