Frage

Macht das $_SERVER["DOCUMENT_ROOT"] Variable existiert auf IIS, das PHP ausführt? Früher dachte ich, diese Variable sei apachespezifisch und auf IIS müssen Sie sie durch String -Manipulation von nachahmen SCRIPT_NAME und SCRIPT_FILENAME Variablen, aber ich sehe diese Variable auf meiner PHP -Installation auf IIS jetzt. Ist es sicher anzunehmen, dass diese Variable immer auf IIS verfügbar sein wird.

War es hilfreich?

Lösung

Ist es sicher anzunehmen, dass Doc Root immer in IIS erhältlich ist? Nein...

$ _Server ['document_root'] ist nicht immer auf IIS verfügbar. Es muss in der Konfigurationsdatei festgelegt werden ...

Wenn es auf Ihrem Server konfiguriert ist, können Sie es verwenden ... stellen Sie einfach sicher, dass sich Ihre Konfigurationsdatei nicht ändert - sonst brechen Sie Ihre Skripte ...

Andere Tipps

IIS setzt nicht immer $ _server ['document_root'

Wie setzen Sie es in einer Konfigurationsdatei ein, sodass der Rest Ihres Codes wie auf Apache -Servern funktioniert?

Ausgabe $ _server, um zu sehen, was Sie möglicherweise verwenden können:

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

In diesem Fall werden der script_filename und script_name festgelegt.

Ändern Sie den folgenden Code, um das zu verwenden, was angegeben wird, um document_root zu erhalten:

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']);
}

Jetzt können Sie $ _server ['document_root'] normalerweise verwenden:

$docroot = getenv("DOCUMENT_ROOT"); 
include_once "$docroot/folder/yourfile.php"; 

Ich habe es gelöst, indem ich einfach auf mein Webrouch verwiesen und als eine meiner eigenen Variablen festgelegt wurde.

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

Der folgende Code erhält das aktuelle Arbeitsverzeichnis von PHP, das das Verzeichnis mit der Datei enthält, auf der Sie diese ausführen. chdir('/') Geht in meinem Fall zur Wurzel, wo PHP arbeiten kann C:\. Das Web -Root meines Beispiels des Webservers ist bei C:\example-web-server, Sie können es so in PHP wie folgt verweisen:/example-web-server.

Sobald Sie den Pfad für PHP haben, können Sie ihn als Variable festlegen und aufrufen. Ich werde ein Beispiel für ein verwenden include() von C:\example-web-server\testing\index.php:

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

Ich weiß, dass dies ein alter Thread ist, aber ich kann nicht der einzige sein, der eine Lösung dafür benötigt.

Das habe ich oben auf Index.php gemacht:

if(!isset($_SERVER["DOCUMENT_ROOT"]))
{
    $_SERVER["DOCUMENT_ROOT"]=getcwd();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top