如何将环境变量传递给自动加载的mod_perl处理程序,以便在模块加载时使用?
我有一个mod_perl的HTTP请求处理程序,它需要在模块加载时从如何将环境变量传递给自动加载的mod_perl处理程序,以便在模块加载时使用?,perl,apache,mod-perl2,Perl,Apache,Mod Perl2,我有一个mod_perl的HTTP请求处理程序,它需要在模块加载时从%ENV读取一个环境变量。使用指令将环境变量从Apache配置传递到mod_perl 这很好,直到出于性能原因,我们在启动时将Apache配置更改为处理程序。当模块像这样自动加载时,PerlSetEnv不会在模块加载时生效,我们需要的变量只能在处理程序方法内的请求时从%ENV中获得 是否有办法继续使用自动加载,但仍然在Apache配置中设置环境变量,该变量在模块加载时在Perl的%ENV中可用? 最简单的例子: 这里有一个简化的
%ENV
读取一个环境变量。使用指令将环境变量从Apache配置传递到mod_perl
这很好,直到出于性能原因,我们在启动时将Apache配置更改为处理程序。当模块像这样自动加载时,PerlSetEnv
不会在模块加载时生效,我们需要的变量只能在处理程序方法内的请求时从%ENV
中获得
是否有办法继续使用自动加载,但仍然在Apache配置中设置环境变量,该变量在模块加载时在Perl的%ENV
中可用?
最简单的例子:
这里有一个简化的测试用例来说明这个问题
未启用自动加载的Apache配置:
PerlSwitches -I/home/day/modperl
<Location /perl>
SetHandler modperl
PerlSetEnv TEST_PERLSETENV 'Does it work?'
PerlResponseHandler ModPerl::Test
Allow from all
</Location>
在浏览器中查看localhost/perl时,我看到:
ENV:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TEST_PERLSETENV: Does it work?
ENV_AT_MODULE_LOAD:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TEST_PERLSETENV: Does it work?
万岁TEST_PERLSETENV
在模块加载时可用,这是我们想要的
但是当我们更改Apache配置以启用自动加载时(在PerlResponseHandler中使用+,如下所示):
我得到以下输出:
ENV:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TEST_PERLSETENV: Does it work?
ENV_AT_MODULE_LOAD:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
嘘<代码>TEST_PERLSETENV在模块加载时不再可用:(如何在保持自动加载行为的同时将其取回?Argh,发布此问题30秒后,我找到了答案。谢谢 将
PerlSetEnv
移动到包含PerlResponseHandler
指令的
块之前,它将再次工作
i、 e.像这样:
PerlSwitches -I/home/dbarr/modperl
PerlSetEnv TEST_PERLSETENV 'Does it work?'
<Location /perl>
SetHandler modperl
PerlResponseHandler +ModPerl::Test
Allow from all
</Location>
PerlSwitches-I/home/dbarr/modperl
PerlSetEnv TEST_PerlSetEnv“它有效吗?”
SetHandler modperl
PerlResponseHandler+ModPerl::Test
通融
ENV:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TEST_PERLSETENV: Does it work?
ENV_AT_MODULE_LOAD:
MOD_PERL: mod_perl/2.0.5
MOD_PERL_API_VERSION: 2
PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PerlSwitches -I/home/dbarr/modperl
PerlSetEnv TEST_PERLSETENV 'Does it work?'
<Location /perl>
SetHandler modperl
PerlResponseHandler +ModPerl::Test
Allow from all
</Location>