Корневая переменная документа на PHP-IIS
-
14-10-2019 - |
Вопрос
Делает $_SERVER["DOCUMENT_ROOT"]
переменная существует на IIS, работающем PHP? Ранее я думал, что эта переменная является специфичной и на IIS, вы должны подражать ее по струнным манипуляциям SCRIPT_NAME
а также SCRIPT_FILENAME
Переменные, но теперь я вижу эту переменную на моей установке PHP на IIS. Можно ли предположить, что эта переменная всегда будет доступна на IIS.
Решение
Можно ли предположить, что 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";
Я решил его, просто ссылаясь на свой веб -корень и установив его как одну из моих собственных переменных.
<?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");
?>
Я знаю, что это старая ветка, но я не могу быть единственным, кто нуждается в решении для этого.
Это то, что я сделал на вершине index.php:
if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
$_SERVER["DOCUMENT_ROOT"]=getcwd();
}