require Pfad Problem

18/02/2012 - 13:20 von Philipp Kraus | Report spam
Hallo,

ich habe ein Problem mit require bzw require_once. Ich nutze mehrere
Klassen mit Namespaces, wobei jede Klasse in einer eigenen Datei ist.
Meine Verzeichnisstruktur ist so organisiert:

/
test.php
tools/
test.php
tools.php
other/
myclass.php

Ich setze in der myclass.php ein require_once auf "../tools/tools.php",
ich möchte relativ zu myclass.php die tools.php includieren.
In der /test.php steht dann ein require_once("other/myclass.php"). Ich
bekomme aber die Meldung wenn /test.php aufrufe, dass die Datei
tools.php
nicht gefunden wird. Das require_once in der myclass.php erwartet, dass
ich dort "tools/tools.php" verwende. Also anscheinend immer relativ
zu der Datei in der ich es verwende. Wenn ich nun aber in
tools/test.php ebenfalls ein require_once("../other/myclass.php")
bekommt ich das Problem,
dass der Pfad dann eben innerhalb der myclass.php so lauten müsste
require_once("tools.php"), weil es in diesem Fall ja relativ zu
tools/test.php
liegt.

Was habe ich übersehen?

Danke

Philipp
 

Lesen sie die antworten

#1 k
18/02/2012 - 18:23 | Warnen spam
Philipp Kraus writes:

Hallo,

ich habe ein Problem mit require bzw require_once. Ich nutze mehrere Klassen
mit Namespaces, wobei jede Klasse in einer eigenen Datei ist. Meine
Verzeichnisstruktur ist so organisiert:

/
test.php
tools/
test.php
tools.php
other/
myclass.php

Ich setze in der myclass.php ein require_once auf "../tools/tools.php", ich
möchte relativ zu myclass.php die tools.php includieren.
In der /test.php steht dann ein require_once("other/myclass.php"). Ich bekomme
aber die Meldung wenn /test.php aufrufe, dass die Datei tools.php
nicht gefunden wird. Das require_once in der myclass.php erwartet, dass ich
dort "tools/tools.php" verwende. Also anscheinend immer relativ
zu der Datei in der ich es verwende. Wenn ich nun aber in tools/test.php
ebenfalls ein require_once("../other/myclass.php") bekommt ich das Problem,
dass der Pfad dann eben innerhalb der myclass.php so lauten müsste
require_once("tools.php"), weil es in diesem Fall ja relativ zu tools/test.php
liegt.

Was habe ich übersehen?



Du konstruierst die Pfade falsch. Wenn du eine Datei von einem Webserver
aufrufst (hier /test.php) setzten die meisten Webserver, das aktuelle
Arbeitsverzeichnis auf die Location (Apache Terminologie), die du
aufrufst: hier also DOCUMENT_ROOT. Wenn du jetzt require
'../other/myclass.php' aufrufst, wird dein include_path abgearbeitet, ob
dort dieser Pfad zu finden ist; meist ist "." der erste Eintrag darin.

Wenn du weisst, wo die zu inkludierende Datei relativ zur inkludierenden
Datei liegt, konstruierst du besser einen absoluten Pfad.

Dazu kann man die __DIR__ oder __FILE__ Konstanten nutzen.

In myclass.php stünde etwa:
require_once dirname(__DIR__) . '/tools/tools.php';
In test.php steht:
require_once __DIR__ . '/other/myclass.php';

KP

Ähnliche fragen