Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/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
Apache 在mod_perl处理程序外部获取请求对象_Apache_Perl_Apache2_Mod Perl - Fatal编程技术网

Apache 在mod_perl处理程序外部获取请求对象

Apache 在mod_perl处理程序外部获取请求对象,apache,perl,apache2,mod-perl,Apache,Perl,Apache2,Mod Perl,我想从mod_perl处理程序调用的子例程登录到Apache日志文件,但该子例程没有请求对象($r) 虽然使用print STDERR或warn有效,但我想使用Apache2::Log在日志中获取其他请求信息:- [Fri May 30 16:12:37 2014] [info] [client 123.123.123.123] cannot do this 而不仅仅是 cannot do this 我希望在处理程序中避免全局初始化,因为这意味着要更新几百个处理程序:- my $global

我想从mod_perl处理程序调用的子例程登录到Apache日志文件,但该子例程没有请求对象($r)

虽然使用
print STDERR
warn
有效,但我想使用Apache2::Log在日志中获取其他请求信息:-

[Fri May 30 16:12:37 2014] [info] [client 123.123.123.123] cannot do this
而不仅仅是

cannot do this
我希望在处理程序中避免全局初始化,因为这意味着要更新几百个处理程序:-

my $globalr;
sub handler {
    $globalr = shift;
    ...
    Common::subroutine_that_also_logs();
}

package Common;
sub subroutine_that_also_logs {
    ...
    $globalr->log->info('can try this')
    ...
}

我已经为初始化
$globalr
设置了一个
PerlFixupHandler
,但我想知道是否有更好的方法,或者是否可以通过其他方式直接使用
$r

您可以使用
Apache2::RequestUtil

package Common;
use Apache2::RequestRec;
use Apache2::RequestUtil;

sub subroutine_that_also_logs {
    my $r = Apache2::RequestUtil->request;
    # some process you want using $r
}
如果此阶段是PerlFixupHandler,
$r
具有完整的请求信息,例如MIME类型等

如果使用此方法,则必须在
httpd.conf
apachehttpd配置文件上编写
PerlOptions+GlobalRequest


有关详细信息,请参见
perldocapache2::RequestUtil

是的,这正是我想要的。谢谢
package Common;
use Apache2::RequestRec;
use Apache2::RequestUtil;

sub subroutine_that_also_logs {
    my $r = Apache2::RequestUtil->request;
    # some process you want using $r
}