Seite 1 von 1
PHP includes und relative Pfade
Verfasst: 07.10.2006, 11:24
von wuschba
Hallo!
Habe folgendes Problem: Ich möchte ein Script relativ anlegen, also dass es in jedem Verzeichnis läuft.
datei1.php4 soll also z.B. datei2.php includen:
hauptverzeichnis
- verzeichnis1
-- datei1.php4
- verzeichnis2
-- datei2.php4
Dazu schreibe ich in datei1.php4:
include "../verzeichnis2/datei2.php4".
Dann erhalten ich aber:
Warning: main(../verzeichnis2/datei.php4): failed to open stream: No such file or directory in [pfad]\hauptverzeichnis\verzeichnis1\datei1.php4 on line 2
Wieso funktioniert das nicht und wie mache ich es richtig? Der php-include-path enthält auch ".", also müßte es meiner Meinung nach oben funktionieren...
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 07.10.2006, 12:02
von Mr Omega
Wenn Deine index Datei in Deinem Hauptverzeichnis liegt und Du Deine datei1.php von dort includest musst Du die datei2.php in der datei1.php so includen
include("../../verzeichnis2/datei2.php");
hauptverzeichnis
*verzeichnis1
**datei1.php
*verzeichnis2
**datei2.php
*index.php
Verfasst: 07.10.2006, 12:21
von wuschba
Danke für Deine Antwort!
Huch, d.h. ich muß immer relativ zum Script, das eigentlich ausgeführt wird, includen?
Aber ich weiß ja in datei1.php4 gar nicht, ob datei1.php von /hauptverzeichnis/index.php included wurde oder von /hauptverzeichnis/wasweißich/nocheinpfad/ichbraucheauchdatei2.php
Verfasst: 07.10.2006, 12:25
von mcchaos
Du könntest es so machen:
include realpath(dirname(__FILE__)."/../verzeichnis2/datei2.php4");
Aber vielleicht hat ja jemand noch eine einfachere Lösung?!
Verfasst: 07.10.2006, 12:41
von Mr Omega
Sorry ich hatte da einen kleinen Denkfehler
Falsch --> include("../../verzeichnis2/datei2.php");
Richtig --> include("verzeichnis2/datei2.php");
Du musst immer von der obersten eben aus gehen.
Es Sei denn Du führst die Datei von hauptverzeichnis/verzeichnis1/datei1.php direkt aus, dann wäre include("../verzeichnis2/datei2.php"); richtig
Verfasst: 07.10.2006, 17:03
von net(t)worker
zur Not den include-path um "../", "../../" und "../../../" erweitern und
include("verzeichnis2/datei2.php");
verwenden.....

Verfasst: 08.10.2006, 17:20
von fornex
lol, oder am besten mit "../../../../../../../../" erweitern
chdir( $HTTP_SERVER_VARS["DOCUMENT_ROOT"] );
include 'verzeichnis2/datei2.php';
include 'verzeichnis1/datei1.php';
usw.
Verfasst: 08.10.2006, 18:01
von net(t)worker
fornex hat geschrieben:
chdir( $HTTP_SERVER_VARS["DOCUMENT_ROOT"] );
include 'verzeichnis2/datei2.php';
include 'verzeichnis1/datei1.php';
usw.
könnte bei einigen scripten zu Probleme führen wenn du das aktuelle verzeichnis änderst....
Verfasst: 08.10.2006, 20:03
von fornex
net(t)worker hat geschrieben:könnte bei einigen scripten zu Probleme führen wenn du das aktuelle verzeichnis änderst....
es sollen grundsätzlich nur relative pfade angegeben werden. Falls man nen Brei im Script hat, werden immer Tausende Probleme auftauchen. chdir ist kein Allzweckmittel, nur ist die Verwendung logischer und resourcensparender.
Verfasst: 09.10.2006, 11:45
von twitch
Bei manchen Projekten regle ich das so:
define ('twg_pfad', $_SERVER['DOCUMENT_ROOT'].'/'); // steht in der Config-Datei
if (!defined('INCLUDED')) {
// relativen Pfad für jedes Document setzten
$ebene = strlen(substr(__FILE__, 0, strlen(__FILE__) - strlen(basename(__FILE__)) - 1));
if($ebene > strlen(twg_pfad)) {
$tmp_ebene = str_replace(twg_pfad,'',substr(__FILE__, 0, strlen(__FILE__) - strlen(basename(__FILE__)) - 1));
$tmp_ebene = explode('/',$tmp_ebene);
for($i=0;$i<sizeof($tmp_ebene);$i++) {
$pfad .= '../';
}
define('pfad',$pfad);
}else{
define('pfad', './');
}
// Verhindere Doppelte Includes
define ('INCLUDED', true);
}
Damit habe ich mit der Konstanten "pfad" immer den richtigen Pfad...
Kann auch umständlich sein
