PerlSetEnv の使用からカスタム構成ディレクティブの使用に切り替えようとしています。set_val
ドキュメントからのコピーを含む構成モジュールがあります。
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 がファイルの構文を許可するという点でうまく機能します。問題は、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 を使用し$ENV
てブロック内で見ることができたことを除いて、それはある程度理にかなっていBEGIN
ますが、リクエストがどのように発生するかに依存しているのと同じように、自分のディレクティブを見ることができないのはなぜですか? 特に紛らわしいのは、 に渡そうとするとApache2::RequestUtil->request->per\_dir\_config()
、ブロック内でそれが真である場合、どうすれば に到達できるかというget_config()
ことGlobal $r object is not available.
です。BEGIN
$ENV