On Wed, 6 Feb 2002, Sergey Gershtein wrote:
> IS> On Wed, 6 Feb 2002, Sergey Gershtein wrote:
>
> >> Возникла потребность сделать следующее. Модуль apache делает
> >> внутренний subrequest на заданный URI и предпринимает те или иные
> >> действия в зависимости от результата. Фокус в том, что этот самый
> >> subrequest обрабатывается чем-то внешним (например, cgi-скриптом).
>
> ...
>
> 6 февраля 2002 г. в 17:23 Игорь Сысоев писал:
>
> IS> Стандартными средствами - никак. Но можно сделать, как делает mod_gzip -
> IS> перенаправить вывод во временный файл.
>
> IS> Делаем ap_sub_req_lookup_uri(), дискриптор временного файла
> IS> записываем в sub_req->connection->client->fd, предварительно сохранив старое
> IS> значение. Выполняем ap_run_sub_req(). Востанавливаем старый дискриптор.
>
>
> Спасибо, это уже вариант! А если, скажем, я готов проигнорировать тело
> ответа, мне нужно лишь проанализировать его http-заголовки? В конце
> концов внешнему обработчику нет разницы, давать ответ в теле или в
> заголовках. Можно обойтись без временного файла?
>
> Допустим я в sub_req->connection->client->fd загоняю дескриптор
> /dev/null, я смогу получить доступ к заголовкам ответа через
> ap_table_get(sub_req->headers_out,"xxx") ? Этого было бы достаточно.
Можно. Насколько я понимаю, sub_req->headers_out должны оставаться
доступными до ap_destroy_sub_req().
> На самом деле таким экстравагантным способом модуль должен получить
> ответ (да/нет) от некоторого внешнего скрипта (cgi/php и т.п.). Может
> быть есть другие более правильные подходы к организации подобного
> взаимодействия?
Можно попробовать установить sub_req->header_only = 1. В этом случае
тело выводиться не будет, а заголовок для сабреквестов никогда не выводится.
mod_cgi header_only понимает. PHP по идее тоже должен, только я не знаю,
на уровне mod_php или же самого скрипта.
Игорь Сысоев
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.