[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Reflection API, Kohana 3.2, php 5.5, FastCGI
Godod
Здравствуйте. Поднят php 5.5, apache 2.4, kohana 3.2, fastcgi и все это крутится на арче. Когда я хочу зайти на сайт, который на локалке через виртуальной хост, то мне апач отдает 503 ошибку. В логах ничего интересного нет. Понял, что проблема в кохане. Полез в исходники и дошел до места, после которого сразу же отдает 503 ошибку. Это место находится в файле internal.php, class Kohana_Request_Client_Internal, 103 строка:

$class = new ReflectionClass($prefix.$controller);
$class->getMethod('before')->invoke($controller);

Сначала вызывается ReflectionClass для роутинга, а потом идет вызов метода before для его инициализации. Но вот в чем беда. Метод before reflection API получает, но не инициализирует его. Отдает 503 ошибку. Метод invoke в Reflection API:
public function invoke ($object, $parameter = null, $_ = null) {}

Как я понимаю, fastcgi требует абсолютного пути, а не относительного.
Как можно текущую проблему побороть?
Спасибо за помощь.
vasa_c
Почему считаете что fastcgi к этому как-то относится и какие пути имеются ввиду?

Кто выдаёт ошибку? апач, фастцги или кохана?

В примере 3 операции, на какой из них ошибка?

_____________
Блог ГО | Таблица символов Юникода | Графомания
Godod
Цитата (vasa_c @ 14.03.2014 - 14:21)
Почему считаете что fastcgi к этому как-то относится и какие пути имеются ввиду?

Кто выдаёт ошибку? апач, фастцги или кохана?

В примере 3 операции, на какой из них ошибка?

1) Может быть я не прав, но если файл находится просто в папке и зайти до него напрямую, тогда php обрабатывается нормально, но в кохане, если зайти напрямую попадаешь на die. Я не считаю, что проблема в fastcgi, я выразил свое предположение
2) Апач отдает 503 ошибку, после того, как в коде коханы доходит до места с Reflection API. (строка 103 или пункт 3)
3) Ошибка в данной строчке:
$class->getMethod('before')->invoke($controller);
Invis1ble
В лог коханы что-то попадает?

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

vasa_c
1. Как это относится к проблеме?

3. В этой строчке две операции. На которой ошибка?

_____________
Блог ГО | Таблица символов Юникода | Графомания
Godod
Цитата (Invis1ble @ 14.03.2014 - 15:04)
В лог коханы что-то попадает?

Нет. Все пусто.
Godod
Цитата (vasa_c @ 14.03.2014 - 15:07)
1. Как это относится к проблеме?

3. В этой строчке две операции. На которой ошибка?

1) Я подумал, что может быть из-за fastcgi, но оказалось, что нет.
3) Метод invoke($controller).
Метод getMethod('before') нормально обрабатывается.
Invis1ble
права проверь на всякий случай

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Godod
Цитата (Invis1ble @ 14.03.2014 - 15:32)
права проверь на всякий случай

777 права на все файлы и папки
vasa_c
Ну, продолжаем.
1. Что в переменной $controller?
2. Есть ли такой класс?
3. В $prefix что?
4. Как соотносятся класса $prefix.$controller и $controller?
5. Вызывается ли на самом деле метод?

_____________
Блог ГО | Таблица символов Юникода | Графомания
Godod
Цитата (vasa_c @ 14.03.2014 - 15:37)
Ну, продолжаем.
1. Что в переменной $controller?
2. Есть ли такой класс?
3. В $prefix что?
4. Как соотносятся класса $prefix.$controller и $controller?
5. Вызывается ли на самом деле метод?

1) переменная содержит:
object(Controller_Static)#32 (25) {
["errors":protected]=>
NULL
["_model":protected]=>
NULL
["template"]=>
string(4) "main"
["allow_array_post"]=>
bool(false)
[
"login":protected]=>
NULL
["main_page_url":protected]=>
NULL
["model":protected]=>
NULL
["_config":protected]=>
NULL
["user_data":protected]=>
array(0) {
}

["session":protected]=>
NULL
["timers":protected]=>
NULL
["_achievements":protected]=>
NULL
["_encrypt":protected]=>
NULL
["_mode":protected]=>
NULL
["_capcha":protected]=>
NULL
["_domain":protected]=>
NULL
["_post_data":protected]=>
NULL
["_widgets":protected]=>
array(0) {
}

["_game_events":protected]=>
NULL
["education_missions_handler":protected]=>
NULL
["vmmo_api_helper":protected]=>
NULL
["_main":protected]=>
NULL
["auto_render"]=>
bool(true)
[
"request"]=>
object(Request)#25 (21) {
["_requested_with":protected]=>
NULL
["_method":protected]=>
string(3) "GET"
["_protocol":protected]=>
string(8) "HTTP/1.1"
["_secure":protected]=>
bool(false)
[
"_referrer":protected]=>
NULL
["_route":protected]=>
object(Route)#26 (5) {
["_callback":protected]=>
NULL
["_uri":protected]=>
string(46) "((/(/(/page/))))"
["_regex":protected]=>
array(0) {
}

["_defaults":protected]=>
array(2) {
["controller"]=>
string(6) "static"
["action"]=>
string(5) "enter"
}
["_route_regex":protected]=>
string(128) "#^(?:(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++)(?:/(?P[^/.,;?\n]++)(?:/page/(?P[^/.,;?\n]++))?)?)?)?$#uD"
}
["_routes":protected]=>
NULL
["_response":protected]=>
object(Response)#30 (5) {
["_status":protected]=>
int(200)
[
"_header":protected]=>
object(HTTP_Header)#31 (5) {
["_accept_content":protected]=>
NULL
["_accept_charset":protected]=>
NULL
["_accept_encoding":protected]=>
NULL
["_accept_language":protected]=>
NULL
["storage":"ArrayObject":private]=>
array(0) {
}
}

["_body":protected]=>
string(0) ""
["_cookies":protected]=>
array(0) {
}

["_protocol":protected]=>
string(8) "HTTP/1.1"
}
["_header":protected]=>
object(HTTP_Header)#27 (5) {
["_accept_content":protected]=>
NULL
["_accept_charset":protected]=>
NULL
["_accept_encoding":protected]=>
NULL
["_accept_language":protected]=>
NULL
["storage":"ArrayObject":private]=>
array(0) {
}
}

["_body":protected]=>
NULL
["_directory":protected]=>
string(0) ""
["_controller":protected]=>
string(6) "static"
["_action":protected]=>
string(5) "enter"
["_uri":protected]=>
string(0) ""
["_external":protected]=>
bool(false)
[
"_params":protected]=>
array(0) {
}

["_get":protected]=>
array(0) {
}

["_post":protected]=>
array(0) {
}

["_cookies":protected]=>
array(0) {
}

["_client":protected]=>
object(Request_Client_Internal)#28 (2) {
["_previous_environment":protected]=>
NULL
["_cache":protected]=>
NULL
}
["_injected_routes"]=>
array(0) {
}
}

["response"]=>
object(Response)#30 (5) {
["_status":protected]=>
int(200)
[
"_header":protected]=>
object(HTTP_Header)#31 (5) {
["_accept_content":protected]=>
NULL
["_accept_charset":protected]=>
NULL
["_accept_encoding":protected]=>
NULL
["_accept_language":protected]=>
NULL
["storage":"ArrayObject":private]=>
array(0) {
}
}

["_body":protected]=>
string(0) ""
["_cookies":protected]=>
array(0) {
}

["_protocol":protected]=>
string(8) "HTTP/1.1"
}
}

2) Есть
3) Переменная содержит:
string(11) "controller_"

4) В данном коде:
$class = new ReflectionClass($prefix.$controller);

$prefix содержит то, что в пункте 3, а $controller:
string(6) "static"

т.е. получается фраза "controller_static".
5) Как проверить?

Приведу код для полной картины:
$class = new ReflectionClass($prefix.$controller);
if ($class->isAbstract())
{
throw new Kohana_Exception('Cannot create instances of abstract :controller',
array(':controller' => $prefix.$controller));
}

// Create a new instance of the controller
$controller = $class->newInstance($request, $request->response() ? $request->response() : $request->create_response());
// При вызове метода invoke апач отдает 503 ошибку.
$class->getMethod('before')->invoke($controller);
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.