Запуск модуля Apache перед PHP

Я разрабатываю модуль Apache, и мне нужно, чтобы он запускался раньше, чем PHP.

Я попытался зарегистрировать функцию обработчика, используя:

// Hook the main handler function to run before PHP5
static const char * const aszPos[]={ "mod_php5.c", NULL };
ap_hook_handler(cc_handler, NULL, aszPos, APR_HOOK_FIRST);

... но страница по-прежнему выходит с непроанализированными тегами «<?php ?>».

Мне интересно, является ли это проблемой хука, или PHP не анализирует его, потому что он не распознает его как URL-адрес PHP, но я попытался вызвать его, скажем, так:

localhost/authCC/?url=http://www.google.pt/&req=name,nic,photo,TaxNo&token=12345

... при наличии правильной директивы «LocationMatch» в «mods-available/php5.conf», и она по-прежнему не будет анализироваться.

Любые другие предложения?


person ravemir    schedule 20.08.2012    source источник


Ответы (1)


Предполагая, что вы используете 2.4 - ваш код C выглядит нормально (в качестве примера вы использовали mod_heartbeat?). Я подозреваю, что PHP почему-то не срабатывает, потому что не видит причин. Если вы удалите модуль, он сработает, как вы ожидаете? На чем (MIME, расширение, местоположение?). И ваш модуль действительно запускается (ap_log здесь ваш друг), и он не изменяет/аннулирует что-то, на что полагается mod_php (например, тип mime) для запуска?

Dw.

person Dirk-Willem van Gulik    schedule 20.08.2012
comment
Мой модуль определенно запускается, так как он сам генерирует страницу с помощью вызовов ap_rputs. Я делаю 'ap_set_content_type(r, text/html;charset=utf-8);' call, и я проверил, что 'php5.conf' имеет директиву 'SetHandler application/x-httpd-php-source' для всех файлов '.php'. Может быть, это путь, но где я должен установить его? В поле «r-handler»? - person ravemir; 20.08.2012
comment
Нет - это тип MIME (хотя и забавный). Так что это идет в заголовках (MIME). - person Dirk-Willem van Gulik; 21.08.2012
comment
Что ж, я решил установить его с помощью функции 'ap_set_content_type()', но это не сработало. Поработав с конфигурационными файлами, я пришел к выводу, что PHP на самом деле НЕ БЫЛ запущен, потому что он установил себя только как обработчик файлов '.php'. Однако, когда я добавил директиву конфигурации, он отказался переводить PHP-код, который я отправил в ответ, что, как я предполагаю, происходит потому, что PHP теперь работает перед самим модулем, поскольку он ничего не регистрирует. Что мне теперь делать? Было бы разумно изучить входные фильтры? (Я использовал вызовы ap_rputs() для вывода моей страницы) - person ravemir; 21.08.2012
comment
Я столкнулся с той же проблемой. Вы наконец нашли решение? - person benfromaix; 14.04.2015