Переменная 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");
?>
Я знаю, что это старая ветка, но я не могу быть единственным, кому нужно решение для этого.