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

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   Fragen zu Installation & Konfiguration (LAMP, WAMP & Co.) (https://www.php-resource.de/forum/fragen-zu-installation-and-konfiguration-lamp-wamp-and-co/)
-   -   PHP-include vom Rootlevel aus (https://www.php-resource.de/forum/fragen-zu-installation-and-konfiguration-lamp-wamp-and-co/92070-php-include-vom-rootlevel-aus.html)

derTomsen 21-05-2008 00:34

PHP-include vom Rootlevel aus
 
Hallo zusammen,

ich hab ein komisches Phänomen mit meiner Serverkonfiguration.
Zur Situation: ich verwende portbasierte virtuelle Hosts und wenn ich in meinem PHP-Skript z.B.
PHP-Code:

include(/includes/config.php); 

aufrufe, interpretiert PHP den ersten Slash als Rootlevel des Servers (also nicht das Rootlevel des VHosts!).

In der Konfiguration des VHosts ist das DocumentRoot aber richtig gesetzt.

An welcher Einstellung kann das noch liegen?
Bin für jeden Tip dankbar...

onemorenerd 21-05-2008 02:49

Das hat mit VHosts nichts zu tun, das ist immer so.

UzumakiNaruto 21-05-2008 08:44

Re: PHP-include vom Rootlevel aus
 
Zitat:

Original geschrieben von derTomsen
Hallo zusammen,

ich hab ein komisches Phänomen mit meiner Serverkonfiguration.
Zur Situation: ich verwende portbasierte virtuelle Hosts und wenn ich in meinem PHP-Skript z.B.
PHP-Code:

include('/includes/config.php'); 

aufrufe, interpretiert PHP den ersten Slash als Rootlevel des Servers (also nicht das Rootlevel des VHosts!).

In der Konfiguration des VHosts ist das DocumentRoot aber richtig gesetzt.

An welcher Einstellung kann das noch liegen?
Bin für jeden Tip dankbar...

PHP-Code:

include("./includes/config.php"); #aktuelles verzeichnis 

PHP-Code:

include($_SERVER['DOCUMENT_ROOT']."/includes/config.php"); #ab document root 


derTomsen 21-05-2008 09:48

Danke für die Antworten.

@UzumakiNaruto: diese Methoden sind mir bekannt und sie funktionieren auch wunderbar.

Die Sache ist, dass ich keine relativen Pfade in der Applikation will, damit sich z.B. das Includen übersichtlicher und logischer gestaltet.
Ich finde es ziemlich unsexy, wenn man aufgrund der Ordnerstruktur solche
PHP-Code:

include('../../includes/db/driver.php'); 

'Monster' findet.

Da ist doch
PHP-Code:

include('/includes/db/driver.php'); 

viel komfortabler, oder? Vor allem, weil es dann egal ist, in welchem Ordner man sich befindet.

@onemorenerd: es muss schon mit der VHost-Konfiguration zusammenhängen, weil wenn z.B. über Plesk neue Subdomains angelegt werden, hat PHP auch keine Include-Rechte vom Rootlevel aus. Das wär ja sicherheitstechnisch ein SuperGAU!

Also an irgendeiner Einstellung á la DocumentRoot, open_basedir oder include_path wird noch geschraubt werden müssen...

jahlives 21-05-2008 10:14

Zitat:

Die Sache ist, dass ich keine relativen Pfade in der Applikation will, damit sich z.B. das Includen übersichtlicher und logischer gestaltet.
Ich finde es ziemlich unsexy, wenn man aufgrund der Ordnerstruktur solche
Und warum verwendest du dann nicht die Version mit DOCUMENT_ROOT (das ist garantiert kein relativer Pfad)?
Und sonst denke ich du musst mit dem include_path arbeiten (http://lists.apple.com/archives/web-.../msg00052.html)

UzumakiNaruto 21-05-2008 10:17

dann nimm doch ein script um DEIN root zu finden ;)

PHP-Code:

$folder_level "";
while (!
file_exists($folder_level."config.php"))
{
   
$folder_level .= "../";
}
require_once (
$folder_level."config.php");
define("BASEDIR"$folder_level); 

das schreibst du in eine datei die du eh immer brauchst .... z.b. functions.php .. und schon hast du deinen "relativen" pfad

derTomsen 21-05-2008 10:47

Danke für die schnellen Antworten.

Den include_path hab ich schon wie beschrieben angepasst. Leider funktioniert das auch nicht so wie gewollt (also ein include('/includes...') führt wieder ins Rootlevel des Servers).

So richtig zufrieden bin ich zwar noch nicht, aber es wird wohl die DocumentRoot-Methode werden, weil die noch am performantesten ist.

Aber danke an alle!

/tom

jahlives 21-05-2008 10:53

Zitat:

Den include_path hab ich schon wie beschrieben angepasst. Leider funktioniert das auch nicht so wie gewollt (also ein include('/includes...') führt wieder ins Rootlevel des Servers).
Aber ein include('datei.php') sollte aber für jeden VHost funzen, ohne Angabe des Include-Verzeichnisses

derTomsen 21-05-2008 11:03

Zitat:

Original geschrieben von jahlives
Aber ein include('datei.php') sollte aber für jeden VHost funzen, ohne Angabe des Include-Verzeichnisses
Das stimmt und funktioniert auf jeden Fall.
Wenn ich halt in einem Unterordner die datei.php einbinden will muss ich ein '../' davor setzen. Und das wollte ich vermeiden.

jahlives 21-05-2008 11:15

Zitat:

Wenn ich halt in einem Unterordner die datei.php einbinden will muss ich ein '../' davor setzen. Und das wollte ich vermeiden.
Solange sich datei.php im Include Path des jeweiligen VHosts befindet brauchst du eigentlich keine ../ im Pfad. Da reicht der Name doch aus. Oder verstehe ich dein Problem nicht ganz ?

Gruss

tobi

onemorenerd 21-05-2008 11:22

Zitat:

es muss schon mit der VHost-Konfiguration zusammenhängen, weil wenn z.B. über Plesk neue Subdomains angelegt werden, hat PHP auch keine Include-Rechte vom Rootlevel aus. Das wär ja sicherheitstechnisch ein SuperGAU!
Wenn du foo.php in deinem DocRoot includieren kannst, dann auch /Pfad/zum/DocRoot/foo.php. Die Zugriffsrechte auf eine Datei sind nicht von der Art der Referenzierung (relativ/absolut) abhängig.

UzumakiNaruto 21-05-2008 11:28

doc_root
- foo.php
-- dir1
--- bar.php
-- dir2
-- dir3

bar.php
PHP-Code:

include ("../foo.php"); 

../ wollte er vermeiden durch /foo.php aber dann ist er im wurzelverzeichnis seines linux systems und nicht mehr im doc_root

derTomsen 21-05-2008 11:42

Zitat:

Original geschrieben von UzumakiNaruto
../ wollte er vermeiden durch /foo.php aber dann ist er im wurzelverzeichnis seines linux systems und nicht mehr im doc_root
Genauso ist es!

onemorenerd 21-05-2008 11:50

Und so war es schon immer. :rolleyes:

Wollen wir uns jetzt weiter im Kreis drehen oder siehst du ein, dass absolute Pfade immer absolut zum Wurzelverzeichnis des Dateisystems sind und deine Apachekonfiguration daran nichts ändern kann?!

derTomsen 21-05-2008 11:58

Für mich ist das Thema sowieso schon erledigt...

Also, danke und schönen Tag noch!


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24 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