Как узнать DOCUMENT_ROOT в файле startup.pl под mod_perl2? - PullRequest
4 голосов
/ 16 февраля 2010

Я хочу изучить DOCUMENT_ROOT в файле startup.pl, но лучшее, что я могу сделать, - это узнать server_root:

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

что совершенно бесполезно. Я могу установить переменную окружения с

SetPerlEnv DOCUMENT_ROOT /path/to/www

но мне не нравятся дополнительные настройки, если это возможно.

Есть ли способ получить DOCUMENT_ROOT другими способами?

1 Ответ

3 голосов
/ 16 февраля 2010

См. Apache2 :: Директива .Например, в моей системе разработки:

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 .

Если вы используете Сценарии реестра и хотитеизмените на DOCUMENT_ROOT, тогда вы сможете добавить:

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

к сценарию вместо того, чтобы возиться с startup.pl, обработчиками и т. д.

...