gk: include funktioniert bei meinem XAMPP nicht transitiv

Hallo,

hab folgendes Problem:

in a.php steht include 'f/b.php'
in b.php steht include 'g/c.php'

Dies funktioniert auf mehreren Webservern, jedoch nicht auf meiner lokalen XAMPP-Installation.

Wenn ich das Skript auf dem lokalen Webserver starte, ist dem Skript a.php der Inhalt von c.php unbekannt. Es funktioniert nur, wenn c.php auch direkt in a.php inkludiert wird (include 'f/g/c.php').

Ich vermute, daß es evtl. an gewissen Einstellungen liegt, obwohl ich
weder bei Apache noch PHP die Konfiguration geändert habe - doch nichts genaues weiß ich nicht. Über einen entsprechenden Fingerzeig wäre ich sehr dankbar.

vg,

gk

  1. echo $begrüßung;

    in a.php steht include 'f/b.php'
    in b.php steht include 'g/c.php'
    Es funktioniert nur, wenn c.php auch direkt in a.php inkludiert wird (include 'f/g/c.php').

    Alle relativen Pfadangaben beziehen sich auf das aufgerufene Script. Es ist dabei egal, wieviele includes ineinander verschachtelt sind und in welchen Verzeichnissen sie sich befinden.

    Die Ausnahme von (bzw. Ergänzung zu) dieser Regel sind angegebene Verzeichnisse im include_path.

    echo "$verabschiedung $name";

  2. Hi,

    in a.php steht include 'f/b.php'
    in b.php steht include 'g/c.php'

    ...

    (include 'f/g/c.php').

    Das musst du auch in der b.php machen, da der Aufruf ja quasi aus der a.php erfolgt (nachdem diese um b.php erweitert wurde), die ein Verzeichnis höher liegt als b.php.

    Ich vermute, daß es evtl. an gewissen Einstellungen liegt, obwohl ich
    weder bei Apache noch PHP die Konfiguration geändert habe - doch nichts genaues weiß ich nicht. Über einen entsprechenden Fingerzeig wäre ich sehr dankbar.

    Das dieses auf anderen Webservern funktioniert hat, bezweifel ich jetzt mal. Wenn der Pfad nicht stimmt, wird die Datei nunmal nicht gefunden.

    1. Hi,

      in a.php steht include 'f/b.php'
      in b.php steht include 'g/c.php'

      ...

      (include 'f/g/c.php').

      ups, kleine korrektur: so sieht es tatsächlich aus

      in a.php steht include 'f/g/b.php'
      in b.php steht include 'c.php'

      Verzeichnisstruktur:

      a.php
      f
      |-g
          |-b.php
          |-c.php

      Das dieses auf anderen Webservern funktioniert hat, bezweifel ich jetzt mal. Wenn der Pfad nicht stimmt, wird die Datei nunmal nicht gefunden.

      Obiges funktioniert auf anderen Webservern (b.php und c.php liegen im gleichen Verzeichnis). Das ist ja gerade, was mich irritiert hat.
      Hatte ein schnell zusammengestricktes Skript auf dem entfernten Webserver, das funktioniert. Und auf dem lokalen Webserver funktioniert es plötzlich nicht.

      Kann es sein, daß der Ort einer aktuell inkludierten Datei je nach Konfiguration automatisch zum include-Pfad hinzugefügt wird?
      Anders kann ich mir das nämlich nicht erklären ...

      vg,

      gk

      1. echo $begrüßung;

        Kann es sein, daß der Ort einer aktuell inkludierten Datei je nach Konfiguration automatisch zum include-Pfad hinzugefügt wird?

        Das wäre sehr ungewöhnlich.

        Vergleiche doch einfach den include_path der beiden Rechner. phpinfo() bzw. ini_get('include_path') ist dir dabei behilflich.

        echo "$verabschiedung $name";

      2. Hi,

        Kann es sein, daß der Ort einer aktuell inkludierten Datei je nach Konfiguration automatisch zum include-Pfad hinzugefügt wird?
        Anders kann ich mir das nämlich nicht erklären ...

        Was sagt denn das error_log?
        Wenn eine Datei nicht gefunden wird, setht das normalerweise da drin. Und du kannst auch mal mit require() arbeiten und den Fehler abfangen. Im gegesatz zu include() wird nicht nur ne Warnung sondern ein Fatal error erzeugt

        1. Hallo Manuel,

          Was sagt denn das error_log?
          Wenn eine Datei nicht gefunden wird, setht das normalerweise da drin.

          richtig - aber nur auf http-Basis. Auf Dateisystem-Basis dagegen interessiert das den Apachen (dessen Logfile ist das ja) herzlich wenig, ob eine Datei gefunden wird, oder nicht.

          Grüße aus Nürnberg
          Tobias

          1. Hi,

            richtig - aber nur auf http-Basis. Auf Dateisystem-Basis dagegen interessiert das den Apachen (dessen Logfile ist das ja) herzlich wenig, ob eine Datei gefunden wird, oder nicht.

            Findet er die Datei denn? Was kommt denn für eine Fehlermeldung, wenn du den Rückgabewert von include() bzw. require() abfragst?

            Alternativ kannst du ja ne Abfrage machen, ob die Datei existiert mit file_exists(), dann bist du dir sicher, ob die Datei eingebunden werden kann.