Вопрос

Я хочу изучить 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 и обработчики и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top