Как я могу изучить DOCUMENT_ROOT в startup.pl в mod_perl2?
-
21-09-2019 - |
Вопрос
Я хочу изучить DOCUMENT_ROOT в startup.pl, но лучшее, что я могу сделать, это изучить server_root:
use Apache2::ServerUtil ();
$server_root = Apache2::ServerUtil::server_root();
что совершенно бесполезно.Я могу установить переменную окружения с помощью
SetPerlEnv DOCUMENT_ROOT /path/to/www
но мне не нравится дополнительная настройка, если это возможно.
Есть ли способ получить DOCUMENT_ROOT другими способами?
Решение
Видишь 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
и обработчики и т.д.