为什么Apache PerlModule指令没有';设置自定义环境变量?

为什么Apache PerlModule指令没有';设置自定义环境变量?,perl,apache2,mod-perl2,Perl,Apache2,Mod Perl2,我正在构建一个mod_perl网站,我需要设置一个将在perl代码中使用的环境变量 到目前为止,我一直在使用PerlSetEnv指令设置此变量: PerlSetEnv MYVAR myvalue <LocationMatch /perlpath/> SetHandler modperl PerlResponseHandler myhandler Header set Cache-control "no-cache"

我正在构建一个mod_perl网站,我需要设置一个将在perl代码中使用的环境变量

到目前为止,我一直在使用
PerlSetEnv
指令设置此变量:

    PerlSetEnv MYVAR myvalue

    <LocationMatch /perlpath/>
        SetHandler modperl
        PerlResponseHandler myhandler
        Header set Cache-control "no-cache"
    </LocationMatch>
perlstenv MYVAR myvalue
SetHandler modperl
PerlResponseHandler myhandler
标题集缓存控制“无缓存”
这很好,但我想预加载mod_perl处理程序,因为第一次调用非常慢。因此,我将Apache virtualhost文件更改为:

    PerlSetEnv MYVAR myvalue
    PerlModule myhandler         <- add this line

    <LocationMatch /perlpath/>
        SetHandler modperl
        PerlResponseHandler myhandler
        Header set Cache-control "no-cache"
    </LocationMatch>
perlstenv MYVAR myvalue

PerlModule myhandler也许您必须在virtualhost配置中移动setenv

<LocationMatch /perlpath/>
    SetHandler modperl
    PerlSetEnv MYVAR myvalue
    PerlResponseHandler myhandler
    Header set Cache-control "no-cache"
</LocationMatch>

SetHandler modperl
PerlSetEnv MYVAR myvalue
PerlResponseHandler myhandler
标题集缓存控制“无缓存”

也许您必须在virtualhost配置中移动setenv

<LocationMatch /perlpath/>
    SetHandler modperl
    PerlSetEnv MYVAR myvalue
    PerlResponseHandler myhandler
    Header set Cache-control "no-cache"
</LocationMatch>

SetHandler modperl
PerlSetEnv MYVAR myvalue
PerlResponseHandler myhandler
标题集缓存控制“无缓存”

您可以使用PerlPassEnv将env变量转发到服务器中运行的程序。但是,它们在apache请求周期的第一阶段生效,而setEnv和PassEnv在修复阶段才生效

在过去,我使用BEGIN子句来设置env变量,比如ORACLE_HOME,我希望在请求阶段之前就可以看到它


尝试在httpd.conf中的perl BEGIN块中设置变量,这可能会使它比传统指令提前很多。

您可以使用PerlPassEnv将env变量转发到服务器中运行的程序。但是,它们在apache请求周期的第一阶段生效,而setEnv和PassEnv在修复阶段才生效

在过去,我使用BEGIN子句来设置env变量,比如ORACLE_HOME,我希望在请求阶段之前就可以看到它


尝试在httpd.conf中的perl BEGIN块中设置变量,这可能会使它比传统指令提前很多。

我找到了解决问题的方法:将变量作为处理程序的模块参数传递,并通过自定义导入函数获取它。也就是说,我仍然对任何在预加载时设置ENV变量的解决方案感兴趣。我已经找到了解决问题的方法:将变量作为处理程序的模块参数传递,并通过自定义导入函数获取它。也就是说,我仍然对任何在预加载时设置ENV变量的解决方案感兴趣。我试过了,但没有成功。我不认为变量的作用域有问题。我试过了,但没有成功。我不认为这是变量范围的问题。这正是我想要的。我应该自己考虑使用BEGIN子句!正是我想要的。我应该自己考虑使用BEGIN子句!