Archiv verlassen und diese Seite im Standarddesign anzeigen : Root-Verzeichnis global festlegen
Hallo Forum,
gibt es eine gute Möglichkeit, ohne absoluten Pfad (also ohne Domain) für sämtliche PHP-Aktionen dasselbe Root-Verzeichnis anzugeben, das auch ein Browser nimmt, wenn z.B. href="/kontakt.html" geklickt wird? Man sollte dies nur einmal angeben müssen.
Danke & Grüße,
Erik
jahlives 06-02-2008, 17:23 $_SERVER['DOCUMENT_ROOT'] wäre ev etwas für dich. Wobei das dann aber ein absoluter Pfad wäre ;)
Danke für die schnelle Antwort. Das hatte ich schon ein paar Threads weiter unten gesehen, aber wie würde ich das konkret umsetzen? Ich würde halt gerne einmal zu Beginn meiner config.php festlegen, von welchem Verzeichnis z.B. bei include('/inc/kontakt.php'); ausgegangen werden soll (d.h. dies soll gleichbedeutend sein mit domain.de/inc/kontakt.php), und es sollte auch lokal mit xampp funktionieren.
jahlives 06-02-2008, 17:46 von welchem Verzeichnis z.B. bei include('/inc/kontakt.php');
Bei einem Linux/Unix wird in diesem Fall versucht von / auszugehen. Das wird dir bei einem Hoster aber Fehlermeldungen um die Ohren hauen weil du keine Berechtigung hast ausserhalb deines Webauftritts auf Dateien zuzugreifen und ggf existiert dieser Pfad ja nicht.
Für includes sollte man immer absolute Pfade wählen und da bietet sich
include($_SERVER['DOCUMENT_ROOT'].'/inc/kontakt.php');
an v.a. weil es dann auch auf einem Windows funzen wird.
Allenfalls könntest du via php.ini den include Pfad ergänzen...
Ich für meinen Teil bevorzuge jedoch die Lösung mit Server + Doc Root
Gruss
tobi
Super, das funktioniert schonmal, vielen Dank. Allerdings muss ich das bei jedem include erneut angeben, oder gibt es auch die Möglichkeit, es nur einmal global zu tun, um Redundanz zu vermeiden?
Der nächste Schritt ist die Einbindung von Grafiken, für die ich mir eine kleine Funktion geschrieben habe. Ist eigentlich selbsterklärend, und funktioniert auch, aber ist das Eurer Meinung nach gut gelöst? Auch hier ist der Slash, mit dem der Pfad beginnt, der "Knackpunkt". $img_pfad bekommt halt z.B. den Wert '/fotos/01.jpg'.
function single_img($img_pfad, $alt_text) {
$size = getimagesize($_SERVER['DOCUMENT_ROOT'].$img_pfad);
echo '<img src="'.$img_pfad.'" alt="'.$alt_text.'" '.$size[3].' />';
}
jahlives 06-02-2008, 21:28 Auch hier ist der Slash, mit dem der Pfad beginnt, der "Knackpunkt". $img_pfad bekommt halt z.B. den Wert '/fotos/01.jpg'.
Wieso Knackpunkt? Pfade für die Clients finde ich persönlich am besten mit / also pseudoabsolut ;)
So funzt es auf der lokalen Testkiste wie im Web und der Pfad sagt auch mehr als ../../../bla/file.txt
Und wegen der Redundanz beim serverseitigen include mit $_SERVER['DOCUMENT_ROOT'] würde ich mir keine Sorgen machen.
Mit der "richtigen" IDE tippst du eh nur '$_S' ENTER 'DO' ENTER (ich glaube sogar 'D' reicht, weil es imho keine weitere Servervar gibt die mit D beginnt).
Ein Hoch auf die Codevervollständigung :D
Gruss
tobi
Wieso Knackpunkt?Das schrieb ich nur deswegen, weil es durch den Slash erstmal nicht mehr gleich behandelt wird (denn der Browser deutet das ja anders als es PHP auf dem Server tut), aber dank DOCUMENT_ROOT gibt es dann ja doch wieder dasselbe Ergebnis.
Pfade für die Clients finde ich persönlich am besten mit / also pseudoabsolut ;)Ja, unbedingt, ich mache das nur so.
Mit der "richtigen" IDE tippst du eh nur '$_S' ENTER 'DO' ENTER (ich glaube sogar 'D' reicht, weil es imho keine weitere Servervar gibt die mit D beginnt).Stimmt, aber ich kann ja auch zu Beginn der config.php einfach eine Variable erstellen und dann mit dieser weiterarbeiten:
$root = $_SERVER['DOCUMENT_ROOT'];
noch einfacher geht's mit ...
// konstante definieren
define('LOC_REAL', dirname(__FILE__));
// path settings for includes
ini_set('include_path', LOC_REAL);
^^ muss in deine config eingebunden werden, welche sich im project-root befindet.
einbinden kannst du dann weitere dateien so ....
include_once './path/to/file.php';
die pathangabe bezieht sich dabei relativ auf den include_path.
um ansonsten auf den path zugreifen zu können, arbeite mit der konstante ...
z.b.
$size = getimagesize(LOC_REAL.$img_pfad);
noch was angepasst. ;-)
jahlives 06-02-2008, 22:05 Stimmt, aber ich kann ja auch zu Beginn der config.php einfach eine Variable erstellen und dann mit dieser weiterarbeiten:
Klar kannst du das, nur hast du genau gleich viel Redundanz ;)
Vermutlich würde der Code dann sogar ein oder zwei tausendstel Sekunden langsamer, weil erst eine Var erstellt und ein Wert zugewiesen werden muss.
@Haxe
Das ist echt ne geile Lösung :grin:
hab noch was bearbeitet. ;-)
jahlives 06-02-2008, 22:16 Du läufst am späten Abend ja zur Hochform auf :D
*gg*
ich verwende das so oder so ähnlich in einem projekt .-)
aber das ist alles nur für den serverseitigen teil.
wenn du nun LOC_HTTP z.b. haben willst, musst du das ganze von hand angeben. :(
einen optimalen weg / den heiligen gral zur automatischen ermittlung habe ich noch nicht gefunden.
jahlives 06-02-2008, 22:24 einen optimalen weg / den heiligen gral zur automatischen ermittlung habe ich noch nicht gefunden.
Wenn du ihn gefunden hast würde ich ihn patentieren lassen und in sauteuren Volumenlizenzen verhöckern ;)
Gruss und gut's Nächtle
hier mal ein ansatz ...
// basic settings http
define('LOC_HTTP_TMP', '/'.str_replace($_SERVER['DOCUMENT_ROOT'], '', LOC_REAL));
define('LOC_HTTP', ( LOC_HTTP_TMP == '/' ? '' : LOC_HTTP_TMP ));
evtl gibt's eine besser lösung. :confused:
tontechniker 07-02-2008, 00:54 Interessant wird das ganze bei der Url - ich finde es ist wesentliche weniger Fehleranfällig überall mit einer absoluten Url zu arbeiten:'http://' . $_SERVER['SERVER_NAME'] .
mb_substr(urldecode($_SERVER['REQUEST_URI']),0,-(mb_strlen($_SERVER['PATH_INFO']))) . '/'; Zufrieden bin ich damit aber auch noch nicht ganz ...
|
-
- |