Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Root-Verzeichnis global festlegen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Root-Verzeichnis global festlegen


 
erikbln
06-02-2008, 17:20 
 
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 
 
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

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

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

 
erikbln
06-02-2008, 21:56 
 
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'];

 
Abraxax
06-02-2008, 22:05 
 
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:

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

 
Abraxax
06-02-2008, 22:36 
 
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 ...

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:18 Uhr.