我一直在嘗試從使用PerlSetEnv切換到使用custom configuration directives。我有一個從文檔的set_val
副本我的配置模塊:如何訪問mod_perl中的BEGIN塊中的Apache服務器配置?
sub set_val
{
local our ($key, $self, $parms, $arg) = @_;
$self->{$key} = $arg;
unless ($parms->path)
{
local our $srv_cfg = Apache2::Module::get_config($self, $parms->server);
$srv_cfg->{$key} = $arg;
}
}
...這是由每個自定義指令子調用。然後,我在我的.conf:
PerlLoadModule MyModule::ServerConfig
MyCustomDirective 'hello'
這工作正常,在httpd的-t okays文件的語法。問題是,我似乎無法從BEGIN塊內的配置文件中獲取值,我需要這樣做。
我已經試過各種東西修修補補:
BEGIN
{
use Apache2::CmdParms();
# use Apache2::Directive();
use Apache2::Module();
# use Apache2::ServerUtil();
# use Apache2::RequestUtil();
use Data::Dump;
warn ddx(Apache2::Module::get_config('MyModule::ServerConfig', Apache2::CmdParms->server));
# warn ddx(Apache2::Directive->as_hash);
# warn Apache2::ServerUtil->dir_config('MyCustomDirective);
# warn Apache2::CmdParms->server->server_hostname();
}
...但無濟於事。我的大部分努力(例如試圖訪問CmdParms->server
)導致Parent: child process exited with status 3221225477 -- Restarting
和Apache自動重新啓動,就像它說的那樣。如果我通過ServerUtil->server to get_config()
,服務器保持活動狀態,但警告只打印出'1'。
我在某處讀到這是因爲您不能在BEGIN
塊中獲取與請求相關的任何內容,因爲請求會有所不同。除了使用PerlOptions + GlobalRequest,我已經能夠在BEGIN
塊內看到$ENV
,所以爲什麼我不能看到自己的指令,就像它們對請求發生的依賴一樣?特別令人困惑的是,如果我試圖通過Apache2::RequestUtil->request->per\_dir\_config()
到get_config()
,它說Global $r object is not available.
如果在BEGIN
塊中的確如此,我怎麼能在$ENV
?
對不起,我不確定你的意思是什麼...... – Kev 2009-01-20 20:56:25