Что эквивалентно $ ENV {DOCUMENT_ROOT} в Perl CGI в Windows IIS (2003) - PullRequest
2 голосов
/ 22 марта 2011

Я мигрирую скрипт perl cgi из linux в windows IIS server 2003 и вижу, что нет переменной среды DOCUMENT_ROOT.

Некоторые поиски в Google предполагают, что я могу взломать его, убрав вещи с конца $0 или cwd, но получение корня сайта должно быть обычной задачей. Есть ли лучший или стандартный способ сделать это?

Ответы [ 2 ]

1 голос
/ 10 июля 2011

IIS на самом деле не имеет понятия корня документа так же, как IIS, поскольку каждое приложение более или менее автономно и независимо. Для любого запроса PATH_TRANSLATED обычно является хорошей базой для построения, для него задается имя физического пути для компонента обработки, установленного в PATH_INFO, и из этого обычно можно добраться до местоположений файловой системы, используя немного File :: Spec навигация.

Также есть SCRIPT_TRANSLATED и SCRIPT_NAME, которые могут быть ближе к тому, что вам нужно. SCRIPT_NAME - это, по сути, абсолютный URL-адрес хоста (за исключением схемы, хоста и порта) для скрипта, а SCRIPT_TRANSLATED - соответствующий физический файл. Для некоторых из этих задач я использую классы URI и URI::file и методы для управления ими.

Они будут полезны, только если ваш запрос обрабатывается тем же приложением, которое обслуживает файлы, но они позволяют вам получать URL-адреса, которые работают. Если вам нужна файловая система для корневого приложения, сопоставленная с "/", и ваш сценарий , а не в том же корневом приложении, вам, скорее всего, придется получить доступ к метабазе IIS (по существу эквивалент httpd.conf и друзьям, но по запросу), чтобы выяснить это.

0 голосов
/ 23 июня 2011

Вы можете распечатать все переменные ENV с помощью простого скрипта CGI, например:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
    print "$key --> $ENV{$key}<br>";
} 

Из этого вывода должно быть полуочевидно, что переменная, которую вы ищете.

...