tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
217
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Kalito Kalito ist offline Mitglied Brokat
    Registriert seit
    Aug 2010
    Ort
    Leipzig
    Beiträge
    380
    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-Code:
    include('../../../pass/pass.php'); 
    Wenn ich nun meinedomain/Script/vz/index.php aufrufe, dann includiere ich ich die DB_zugang.php so:
    PHP-Code:
    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-Code:
    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-Code:
    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?
     
    Ich bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!

    Über ein Danke freut sich jeder

  2. #2
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    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:

    Code php:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    // 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:

    Code php:
    1
    2
    
    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.
    Geändert von saftmeister (01.01.12 um 12:16 Uhr) Grund: Im set_include_path-Code war noch ein Fehler mit dem PATH_SEPARATOR
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  4. #4
    Avatar von ComFreek
    ComFreek ComFreek ist gerade online [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.364
    Blog-Einträge
    4
    Eine dritte Lösung (und meiner Meinung nach beste) wäre noch Konstanten mit Pfadangaben zu definieren:

    PHP-Code:
    <?php

    define
    ('DS'DIRECTORY_SEPARATOR);

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

    // ...

    ?>
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

Ähnliche Themen

  1. Probleme mit Include
    Von sindyho0374 im Forum PHP
    Antworten: 17
    Letzter Beitrag: 11.11.10, 14:26
  2. Antworten: 2
    Letzter Beitrag: 20.03.10, 13:26
  3. Probleme mit include
    Von Disasterp1ece im Forum PHP
    Antworten: 10
    Letzter Beitrag: 11.03.09, 19:24
  4. probleme mit include
    Von janosch im Forum PHP
    Antworten: 3
    Letzter Beitrag: 02.12.03, 19:37
  5. Probleme mit include
    Von Oli im Forum PHP
    Antworten: 5
    Letzter Beitrag: 09.06.02, 15:59