如何在mod_perl2下的startup.pl中学习DOCUMENT_ROOT?

时间:2010-02-16 19:39:42

标签: perl mod-perl mod-perl2 document-root

我想在startup.pl中学习DOCUMENT_ROOT,但我能做的最好的事情是学习server_root:

use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();

这是没用的。我可以用

设置一个环境变量
SetPerlEnv DOCUMENT_ROOT /path/to/www

但如果可能,我不喜欢额外的配置。

有没有办法通过其他方式获取DOCUMENT_ROOT?

1 个答案:

答案 0 :(得分:3)

Apache2::Directive。例如,在我的开发系统上:

use Apache2::Directive ();
my $tree = Apache2::Directive::conftree();
my $vhost = $tree->lookup(VirtualHost => 'unur.localdomain:8080');

File::Slurp::write_file "C:/bzzzt.txt", [ $vhost->{DocumentRoot}, "\n" ];
在我发现必须使用

指定虚拟主机后,

创建了一个文件C:/bzzzt.txt,内容为"E:/srv/unur/deploy/htdocs"

<VirtualHost unur.localdomain:8080>
...
</VirtualHost>

<VirtualHost qtau.localdomain:8080>
...
</VirtualHost>

而不是<VirtualHost *:8080>。否则,每个<VirtualHost *:8080>部分都会覆盖前一部分。

这很烦人。我原以为每个VirtualHost条目都会被使用的ServerName键入。

至于是否有更简单的方法,如果你想在startup.pl中这样做,我恐怕没有。但是,我不确定是否有必要在startup.pl中执行此操作。您也可以使用Apache2::RequestUtil::document_root处理请求时找到文档根目录。

如果您正在运行Registry scripts,并希望更改为DOCUMENT_ROOT,那么您应该可以添加:

chdir $ENV{DOCUMENT_ROOT} 
    or die "Cannot chdir to '$ENV{DOCUMENT_ROOT}': $!";

到脚本,而不是乱用startup.pl和处理程序等。