Как получить рабочее значение DOCUMENT_ROOT на сервере IIS? - PullRequest
0 голосов
/ 06 ноября 2018

Я работал с серверами Linux, я думаю, что около 98% моего времени разработки. И более или менее в первый раз я помещаю код на какой-нибудь сервер IIS.

Я работаю над Linux Env, так что все работает так, как я ожидал, однако добраться до сервера IIS и все рушится. Я спасу всех от громкой сплетни о том, почему IIS и Windows отстой, и займусь этой проблемой.

Использование $_SERVER['DOCUMENT_ROOT'] на моем env выводит значение как:

/ вар / WWW / проект

Что хорошо для включения файлов, например

require_once $_SERVER['DOCUMENT_ROOT']. '/app/connect.php';

Однако на IIS это ошибки с сообщением:

Нет такого файла или каталога

Это заставило меня префикс кода с этим:

<code>echo '<pre>'. print_r($_SERVER['DOCUMENT_ROOT'], 1) .'
';

который выводит это:

C: \ Inetpub \ Wwwroot

100% не связано с действительным сайтом.

Есть ли переменная, специфичная для IIS, которую я должен использовать для включения моих скриптов? Кажется, он имеет огромное влияние на весь мой код, включая файлы, которые вообще не идеальны. В мире снов мой код не будет касаться IIS 10-футовым шестом, но, к сожалению, он должен работать на нем.

Как мне установить рут для сайта в моем коде?

1 Ответ

0 голосов
/ 07 ноября 2018

К сожалению для меня, IIS-сервер не находится под моим контролем, поэтому я не мог найти решения, которые влияют на настройки сервера. Однако мне удалось найти решение:

Я поместил в свой файл шаблона header.php:

<code>echo '<pre>'. print_r(exec('CHDIR'), 1) .'
';

это дало мне значение, которое выглядело так:

C: \ WWW \ MySite

Что сильно отличается от вывода $_SERVER['DOCUMENT_ROOT'].

Я создал условие для разделения ОС сервера и установил новую переменную на основе значения:

if (strpos(PHP_OS, 'Linux') > -1) {
    $root = $_SERVER['DOCUMENT_ROOT'];
    $feRoot = '/';
} else {
    $root = 'C:\\www\\mysite';
    $feRoot = 'http://mysite';
}

Теперь я могу называть свои сценарии так ($DS = DIRECTORY_SEPRARTOR):

require_once $root. $DS .'app'. $DS .'connect.php';

И назовите мои внешние ресурсы так:

<link rel="stylesheet" href="<?php echo $feRoot; ?>/css/file.css" />

Таким образом, ключ к IIS - дело в абсолютах, а не относительно DOCUMENT_ROOT

...