Вопрос

Делает $_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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top