Existiert die $_SERVER["DOCUMENT_ROOT"]
Variable auf IIS mit PHP? Früher dachte ich, diese Variable ist Apache-spezifisch und auf IIS, Sie müssen es emulieren durch String-Manipulation von SCRIPT_NAME
und SCRIPT_FILENAME
Variablen, aber ich sehe jetzt diese Variable auf meiner PHP-Installation auf IIS. Ist davon auszugehen, dass diese Variable immer auf IIS verfügbar ist?DOKUMENTROOT-Variable auf PHP-IIS
Antwort
Ist es sicher anzunehmen, dass doc root immer in IIS verfügbar ist? Nein ...
$ _SERVER [ ‚DOCUMENT_ROOT‘] ist nicht immer verfügbar auf IIS .. es in der Konfigurationsdatei festgelegt werden muss ...
Wenn es auf dem Server konfiguriert ist, Sie ‚könnte‘ verwenden Sie es ... So stellen Sie sicher, dass Ihre Konfigurationsdatei nicht ändert - sonst werden Sie Ihre Skripte brechen ...
IIS nicht immer $ _SERVER [ ‚DOCUMENT_ROOT‘] gesetzt
Wie Sie setzen es in einer Konfigurationsdatei, so funktioniert der Rest Ihres Codes wie auf Apache-Servern?
Ausgabe $ _SERVER, um zu sehen, was gegeben ist, dass Sie vielleicht in der Lage sein zu verwenden:
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 wird die SCRIPT_FILENAME und SCRIPT_NAME eingestellt.
den Code ändern zu verwenden, was DOCUMENT_ROOT zu bekommen gegeben: Jetzt
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']);
}
Sie $ _SERVER verwenden können [ 'DOCUMENT_ROOT'] normalerweise:
$docroot = getenv("DOCUMENT_ROOT");
include_once "$docroot/folder/yourfile.php";
ich es einfach gelöst Referenzierung mein Web-Root und setze es als eine meiner eigenen Variablen.
<?php
echo getcwd();
chdir('/');
echo getcwd();
chdir('/example-web-server');
echo getcwd();
?>
der folgende Code wird das aktuelle Arbeitsverzeichnis von PHP, die das Verzeichnis mit der Datei, die Sie dies auf ausführen. chdir('/')
geht an die Wurzel wo auch immer PHP kann, in meinem Fall C:\
. Der Webstamm meines Beispiel-Webservers ist C:\example-web-server
, so dass Sie in PHP wie folgt darauf verweisen können: /example-web-server
.
Sobald Sie den Pfad für PHP haben, können Sie es als Variable festlegen und aufrufen.
<?php
$webroot = "/example-web-server";
include("{$webroot}/testing/index.php");
?>
Ich weiß, das ist ein alter Thread, aber ich kann nicht die einzige Lösung für diese benötigt werden: Ich werde ein Beispiel für eine include()
von C:\example-web-server\testing\index.php
verwenden.
config file = php.ini oder etwas anderes? –
ich weiß in php.ini Sie können doc_root (das ist unter dem Pfad-Abschnitt) ... Aber das setzt die globale doc_root ... – CarpeNoctumDC
hat nur eine Google-Suche: http://forums.iis.net/p/1154314 /1932457.aspx Ist ein Überblick über einige der Probleme mit doc_root und mehreren Sites ... Nach unten verweist er auf ein paar Links zum Nachlesen ... Wenn Sie nur eine Site haben, ist das kein Problem ... – CarpeNoctumDC