2011-01-02 7 views
2

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

0

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 ...

+0

config file = php.ini oder etwas anderes? –

+0

ich weiß in php.ini Sie können doc_root (das ist unter dem Pfad-Abschnitt) ... Aber das setzt die globale doc_root ... – CarpeNoctumDC

+0

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

1

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"; 
0

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.