PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Root-Verzeichnis global festlegen (https://www.php-resource.de/forum/php-developer-forum/89969-root-verzeichnis-global-festlegen.html)

erikbln 06-02-2008 17:20

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 ;)

erikbln 06-02-2008 17:37

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

Zitat:

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
PHP-Code:

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

erikbln 06-02-2008 18:07

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

PHP-Code:

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

Zitat:

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

erikbln 06-02-2008 21:56

Zitat:

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

Pfade für die Clients finde ich persönlich am besten mit / also pseudoabsolut ;)
Ja, unbedingt, ich mache das nur so.
Zitat:

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:
PHP-Code:

$root $_SERVER['DOCUMENT_ROOT']; 


Abraxax 06-02-2008 22:05

noch einfacher geht's mit ...

PHP-Code:

// 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 ....
PHP-Code:

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.
PHP-Code:

$size getimagesize(LOC_REAL.$img_pfad); 




EDIT:
noch was angepasst. ;-)

jahlives 06-02-2008 22:05

Zitat:

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:

Abraxax 06-02-2008 22:09

hab noch was bearbeitet. ;-)

jahlives 06-02-2008 22:16

Du läufst am späten Abend ja zur Hochform auf :D

Abraxax 06-02-2008 22:20

*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

Zitat:

einen optimalen weg / den heiligen gral zur automatischen ermittlung habe ich noch nicht gefunden.
OffTopic:

Wenn du ihn gefunden hast würde ich ihn patentieren lassen und in sauteuren Volumenlizenzen verhöckern ;)


Gruss und gut's Nächtle

Abraxax 06-02-2008 22:36

hier mal ein ansatz ...

PHP-Code:

// 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:
PHP-Code:

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:35 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG