$_SERVER[DOCUMENT_ROOT] ist leer

Pega-Tech

Grünschnabel
Guten Tag

Ich habe auf einem IIS Server PHP Version 5.0.2, nun möchte ich einscript laufen lassen, das folgende Konstanten benutzt :

$document_root = $_SERVER[DOCUMENT_ROOT];
$http_host = 'http://' . $_SERVER[HTTP_HOST];

Leider werden diese nicht gefunden denn ich bekomme folgende Fehlermeldungen :

Notice: Use of undefined constant DOCUMENT_ROOT - assumed 'DOCUMENT_ROOT' in D:\Inetpub\wwwroot\htdocs\ORDNER_von_PLONE\www\phpsitemap.php on line 34

Notice: Use of undefined constant HTTP_HOST - assumed 'HTTP_HOST' in D:\Inetpub\wwwroot\htdocs\ORDNER_von_PLONE\www\phpsitemap.php on line 35

Das ganze ist hier : http://www.plone.li/phpsitemap.php
und hier sieht man die Variablen von PHP :
http://www.plone.li/php.php

In der PHP.ini habe ich register_globals = on gesetzt.

Ich habe den Server von einem fremden Admin übernehmen müssen, und weiss nicht genau welche Einstellungen der gemacht hat.

Muss ich die PHP.ini neu konfigurieren, oder eine andere Datei? damit diese Kontsanten gefunden werden?

Ich danke für jede Hilfe.
Gruess
Michel Koller
 
Du deklariest die Variablen als Konstanten, also genau disjunktiv.
Richtig:
PHP:
$document_root = $_SERVER['DOCUMENT_ROOT'];
$http_host = 'http://' . $_SERVER['HTTP_HOST'];
 
Vielen DEank für die Antwort

Was mich verwundert ist :

auf einem anderen server(UNIX) funktioniert das mit
$_SERVER[DOCUMENT_ROOT];

Bei meinem Server(IIS) funktioniert es nur wenn ich das so mache :
$_SERVER['DOCUMENT_ROOT'];

Ist PHP auf Windows nicht gleich wie PHP auf UNIX?
Oder ist das versionsabhängig?

Ich wollte das Skript benutzen von Google für die Sitemaps :
http://www.hybrid.de/wissen/wissen034.htm
und dort sind die Variablen alle so :
$_SERVER[DOCUMENT_ROOT];

Ich kann mir nicht vorstellen das die Programmiersprache anders sind, wo ist mein Denkfehler?

Danke und Gruess
Michel Koller
 
Nee, du hast da keinen Denkfehler. Das liegt nicht an der Programmiersprache, sondern an den Interpretationsunterschieden der Systeme.

Windows ist da halt zickiger. Die syntaktisch korrekte Schreibweise schreibt allerdings die Kennzeichnung von Strings durch Hochkomma oder Anführungszeichen vor.
 
Die Variablen werden nun akzeptiert, nun tut sich aber ein anderes kleines problemchen auf , wenn ich DOCUMENT_ROOT herauschreiben will zb so :
echo $_SERVER['DOCUMENT_ROOT'];

Dann bekomme ich diese Fehlermeldung :
http://www.plone.li/phpsitemap2.php

Muss ich diese Variabel denn noch irgendwo definieren, auf dem Server? oder in der PHP.ini als doc_root?

Îch habe dort auch Viruelle Domains wie bekommen den die den DOCUMENT_ROOT?

Oder muss ich den etwa selber im Skript einzel pro Virtual server definieren.

Danke falls jemand dochnoch einen tip im Sack hat.

Gruess
Michel Koller
 
Hallo!

DOCUMENT_ROOT liest PHP eigentlich aus der Serverconfig aus.
Hierbei hat PHP aber anscheinend Probleme mit dem IIS denn selbst dort ist in der Config ein Documentroot eingetragen.
Jetzt frage mich aber nicht wo, dafür ist IIS schon zu lange her bei mir.
Ich weiss aber genau dass er dort eingetragen ist, bzw. man ihn auch ändern muss wenn man z.b. auf eine andere Partition/HDD wechseln wollte.

Wenn es nur für eine Domain ist, würde ich es ungefähr so machen:
PHP:
$dir = "D:\Inetpub\wwwroot\htdocs\ORDNER_von_PLONE\www\";
echo "Document root: ".$dir."<br />";
Kann sein dass Du im Pfad auch / anstatt \ nehmen musst, dass weiss ich jetzt nichtmehr genau.

Bei mehreren Domains könnte man auch die Einträge aus dem Formular übergeben und die ausgabe mit if/else regeln.

Gruss Dr Dau
 
Guten Tag

Und hier die Lösung :

ich habe eine Datei erstellt im Root vom PHP-Verzeichnis, diese Datei heisst "root.php" und enthällt folgenden Code :
Code:
   <?PHP
     $pathInfo                 = $_SERVER["ORIG_PATH_INFO"];
     $pathTranslated           = $_SERVER["ORIG_PATH_TRANSLATED"];
     $pathInfo                 = preg_replace("/\//", "\/", $pathInfo);
     $pathTranslated           = str_replace("\\", "/", $pathTranslated);
     $_SERVER["DOCUMENT_ROOT"] = preg_replace("/$pathInfo/i", "", $pathTranslated);
   ?>

Dann habe ich in der php.ini folgende Einträge gemacht:
extension_dir = "./ext"
auto_prepend_file = C:\PHP5\root.php

Die Direktive "doc_root" habe ich leer gelassen.

So nun bekomme ich für jeden Virtuellen Server den richtigen DOCUMENT_ROOT.

Ich wünsche allen ein wunderschönes Wochenende

Gruess
Michel Koller
 
Zurück