Переменная DOCUMENT ROOT в PHP-IIS

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

3 ответа

Решение

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

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

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

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

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

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

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

В этом случае 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"; 

Это то, что я сделал поверх index.php:

if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
    $_SERVER["DOCUMENT_ROOT"]=getcwd();
}

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

<?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");
?>

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

Другие вопросы по тегам