Probleme mit include

Kalito

Erfahrenes Mitglied
Hallo und frohes Neues :)

ich bin ein bisschen verwundert. Ich includiere in einer Datei eine andere Datei und mal funktioniert es und mal nicht. Da diese ziemlich weit oben liegt bzw. die eigentliche Homepage in einem anderen Ordner liegt. Die Datei befindet sich in meinedomain/Script/vz/lib/DB_zugang.php
Darin werden die Zugangsdaten includiert.
PHP:
include('../../../pass/pass.php');

Wenn ich nun meinedomain/Script/vz/index.php aufrufe, dann includiere ich ich die DB_zugang.php so:
PHP:
include('lib/DB_zugang.php');

Wenn ich aber eine andere Datei aufrufe z.B. meinedomain/Script/cronjob.php und dort die DB_zugang.php includiere
PHP:
include('vz/lib/DB_zugang.php');
dann funktioniert die cronjob.php nicht, da diese nicht die pass.php includieren konnte :( Wenn ich aber nun den Pfad der includierten Datei ändere in
PHP:
include('../../pass/pass.php');
, dann funktioniert zwar die Cronjob.php, aber nicht mehr die meinedomain/Script/vz/index.php

Woran liegt das, obwohl ich die selbe Datei includiere?
 
Du solltest beim includen 2 Dinge beachten:

- Es gibt eine include_path-Einstellung, die man mit get_include_path() auslesen und mit set_include_path() überschreiben kann.
- Wenn Scripts außerhalb (nicht in einem Ordner, der sich im include_path oder Ebenen darunter befindet) liegen, sollten diese über ihren absoluten Pfad im Datei-System eingebunden werden. Eine große Hilfe ist hier $_SERVER['DOCUMENT_ROOT'].

Du kannst dein Problem jetzt auf 2 Arten lösen:

- Du setzt den include_path so, das der Ordner, in dem sich das einzubindene Script befindet, angehängt und damit ebenfalls durchsucht wird.
- Du verwendest den absoluten Pfad zum Script.

Beispiel für das Erweitern des include_path:

PHP:
// Erweitern des include_path
set_include_path(
  get_include_path() . PATH_SEPARATOR .
  $_SERVER['DOCUMENT_ROOT'] . '/Script/vz/lib' . PATH_SEPARATOR .
  $_SERVER['DOCUMENT_ROOT'] . '/Script/vz/pass'
);

// Jetzt kann die Datei ohne Pfad-Angaben eingebunden werden
include('DB_zugang.php');
include('pass.php');

Beispiel für den absoluten Pfad beim Einbinden:

PHP:
include($_SERVER['DOCUMENT_ROOT'] . '/Script/vz/lib/DB_zugang.php');
include($_SERVER['DOCUMENT_ROOT'] . '/Script/vz/pass/pass.php');

Fazit: Die verwendung von relativen Pfadangaben in verschiedenen Ordner-Strukturen sollte vermieden werden.
 
Zuletzt bearbeitet:
Ich sehe aus deinem Beispiel nicht gerade, von woher du die include() aufrufst.
Wenn due verschachtelte include() hast, kann das zu interessanten nebenwirkungen führen. Entweder kann man das so lösen wie saftmeister geschrieben hat, oder man kann einen anderen Ansatz nehmen.
PHP verschachtelte include
 
Eine dritte Lösung (und meiner Meinung nach beste) wäre noch Konstanten mit Pfadangaben zu definieren:

PHP:
<?php

define('DS', DIRECTORY_SEPARATOR);

define('ROOT', __DIR__);
define('VZ_LIBS', ROOT.DS.'vz'.DS.'libs');

// ...

?>
 
Zurück