Переменная DOCUMENT ROOT в PHP-IIS - PullRequest
2 голосов
/ 02 января 2011

Существует ли переменная $_SERVER["DOCUMENT_ROOT"] в IIS с PHP?Ранее я думал, что эта переменная специфична для Apache, и в IIS вы должны эмулировать ее путем манипулирования строками переменных SCRIPT_NAME и SCRIPT_FILENAME, но теперь я вижу эту переменную в моей установке PHP на IIS.Можно ли предположить, что эта переменная всегда будет доступна в IIS.

Ответы [ 3 ]

1 голос
/ 23 ноября 2013

IIS не всегда устанавливает $ _SERVER ['DOCUMENT_ROOT']

Как установить его в файле конфигурации, чтобы остальная часть вашего кода работала как на серверах Apache?

Выведите $ _SERVER, чтобы увидеть, что с учетом того, что вы можете использовать:

<code>echo "<br>_SERVER:<br><pre>";
print_r($_SERVER);
echo "


_ENV:
";
print_r($_ENV);
echo "


";

В этом случае SCRIPT_FILENAME и SCRIPT_NAME установлены.

Измените код ниже, чтобы использовать то, что дано для получения DOCUMENT_ROOT:

if (!isset($_SERVER['DOCUMENT_ROOT']) || $_SERVER['DOCUMENT_ROOT'] === '') {
    $_SERVER['DOCUMENT_ROOT'] = substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
    putenv('DOCUMENT_ROOT='.$_SERVER['DOCUMENT_ROOT']);
}

Теперь вы можете использовать $ _SERVER ['DOCUMENT_ROOT '] обычно:

$docroot = getenv("DOCUMENT_ROOT"); 
include_once "$docroot/folder/yourfile.php"; 
0 голосов
/ 08 августа 2016

Я решил это, просто сославшись на мой веб-корень и установив его в качестве одной из моих собственных переменных.

<?php
echo getcwd();
chdir('/');
echo getcwd();
chdir('/example-web-server');
echo getcwd();
?>

Следующий код получает текущий рабочий каталог PHP, который будет каталогом, содержащимфайл, на котором вы работаете.chdir('/') идет в корень везде, где может работать PHP, в моем случае C:\.Мой пример веб-корня веб-сервера находится на C:\example-web-server, поэтому вы можете ссылаться на него в PHP следующим образом: /example-web-server.

Как только у вас есть путь для PHP, вы можете установить его как переменную и вызвать его.Я буду использовать пример include() из C:\example-web-server\testing\index.php:

<?php
$webroot = "/example-web-server";
include("{$webroot}/testing/index.php");
?>

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

0 голосов
/ 03 января 2011

Можно ли предположить, что doc root всегда доступен в IIS? Нет ...

$ _ SERVER ['DOCUMENT_ROOT'] не всегда доступен в IIS ... его необходимо установить в файле конфигурации ...

Если он настроен на вашем сервере, вы «можете» его использовать ... Просто убедитесь, что ваш конфигурационный файл не изменился - в противном случае вы сломаете свои сценарии ...

...