Fabian Hachen: Problem mit PHP Include

Hallo...

Habe ein Problem mit einem PHP Include. Kenne mich leider auch nicht genügend aus mit PHP, so habe ich bisher leider keine Lösung gefunden.

Ich will ein .txt File includen. Diese Datei muss in der Navigation unter "CURRENTLY HEARING" angezeigt werden. Nun ist mein Problem, dass auch die Navigation bereits in die Seite includet ist, also ein Include im Include ;-) Hier nochmals rasch die Übersicht:

Normale Seite --> Include der Navigation (menu.php) --> Include des Songtickers (trackinfo.txt)

Das ganze funktioniert eigentlich auch richtig, wenn ich es so mache:
<? include "includes/trackinfo.txt"; ?>

http://www.fh-design.ch/html/content/blogger/default.php

Nun habe ich aber leider gemerkt, dass es nur funktioniert bei den Dateien die im Hauptverzeichnis liegen, also hier:
http://www.fh-design.ch/html/content/blogger/z.B. default.php

Allerdings nicht bei Unterverzeichnissen, z.B. hier:
http://www.fh-design.ch/html/content/blogger/archives/000020.php

Das liegt ja wahrscheinlich an der relativen Pfadangave des Includes. Leider funzt das Include aber auch nicht, wenn ich die Angabe absolut eingebe, also so:
http://www.fh-design.ch/html/content/blogger/includes/trackinfo.txt

Hier die Fehlermeldung:
Warning:  Failed opening 'http://www.fh-design.ch/html/content/blogger/includes/trackinfo.txt' for inclusion (include_path='.;c:\Php\includes') in D:\wwwroot\fh-design.ch\html\content\blogger\default.php on line 321

Habe es auch schon auf folgende Art versucht, hat leider auch nicht
funktioniert, vielleicht habe ich es aber auch falsch gemacht:

<? include ("$DOCUMENT_ROOT/html/content/blogger/includes/trackinfo.txt");
?>

oder

<? chdir("includes");
include("trackinfo.txt"); ?>

Wäre super wenn mir jemand eine Lösung hat! Zum voraus besten Dank...

Gruss Fabian

  1. abend,

    Ich will ein .txt File includen. Diese Datei muss in der Navigation unter "CURRENTLY HEARING" angezeigt werden. Nun ist mein Problem, dass auch die Navigation bereits in die Seite includet ist, also ein Include im Include ;-) Hier nochmals rasch die Übersicht:

    http://de3.php.net/manual/de/function.include-once.php

    HIH

    mfg,
    (tanz das)
    Z.N.S.

    --
    <img src="http://www.dmp-web.de/comunicout/neubauten.gif" border="0" alt="">
    1. Hallo Z.N.S.

      Danke fŸr Deine Antwort, befŸrchte leider, dass mein Provider keine so neue PHP Version hat, gibt es andere Mšglichkeiten?
      Besten Dank...

      Gruss Fabian

      1. Moin!

        Danke fŸr Deine Antwort, befŸrchte leider, dass mein Provider keine so neue PHP Version hat, gibt es andere Mšglichkeiten?

        Zwei Dinge:

        Erstens findest du deine PHP-Version heraus mit phpinfo().

        Zweitens kann PHP schon seit immer include_once().

        Allerdings: Include bindet _Programmcode_ ein. Es für das Einbinden von Textdateien einzusetzen ist immer ein gewisses Risiko, das nach Möglichkeit zu vermeiden ist, weil es absolut unnötig ist.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Ach sch... ich kriegs einfach nicht zum laufen. WŠre toll wenn mal jemand sagen kšnnte was ich reinschreiben soll. Bin nun schon so viele Stunden da dran das es mich langsam aber sicher richtig nervt, das kann doch gar nicht so schwer sein. Hier nochmals alle Infos:

          In der Datei default.php (oder andere) setze ich ein Include auf mein MenŸ mit
          <$MTInclude file="includes/menu.php"$>

          In der Datei menu.php habe ich dann noch das Include auf die
          Textdatei mit den Songtiteln drin. das sieht dann so aus:
          <$MTInclude file="includes/trackinfo.txt"$>

          Das alles funktioniert nun einwandfrei von der default.php
          aus. Allerdings funzt es nicht mehr, bei den Dateien die in
          den Unterordnern liegen. Das Menu funzt zwar immer, aber beim
          Songticker kommt dann immer der Fehler.

          Meine Struktur sieht so aus:

          http://www.fh-design.ch/html/content/blogger/includes/
          --> menu.php (MenŸ)
          --> trackinfo.txt (Songticker)

          http://www.fh-design.ch/html/content/blogger/
          --> default.php (hier funktioniert auch alls)

          http://www.fh-design.ch/html/content/blogger/archives
          --> 000020.php (hier funzt es dann nicht mehr mit dem Songticker,
          nur noch das Menu :-(

          Freue mich auf eine Antwort...

          Gruss aus der Schweiz
          Fabian

  2. Servus,
    habe in etwas das gleiche Problem (siehe posting weiter unten).

    Eine Loesung (die fuer mich nicht geht, da ich auch offline testen will).
    Gehe ganz runter auf den root und dann wieder hoch (geht jedenfalls in ASP so):

    <!--#INCLUDE file = "/Pfad/includes/inc.asp"-->

    So in etwa,
    bin mir auch nicht so sicher, da ich eben eine andere Loesung suche und diese fuer mich nichts ist.
    Stefan
    PS: In ASP kann man auch leider keinen variablen String aufbauen, die die Dateiverbindungen vor dem abarbeiten des Skriptes hergestellt werden.

  3. Hallo,

    Das liegt ja wahrscheinlich an der relativen Pfadangave des Includes.

    Da vermute ich auch den Fehler.
    Ein Include verhaelt sich AFAIK so, wie wenn es dort stehen wuerde, wo Du es einbettest.
    (bei verschachtelten Includes also in der "aeussersten" Datei.)
    Du solltest also in der ersten Include-Datei  den Pfad zur zweiten Include-Datei
    so angeben, wie er in der "aeussersten" Datei stehen muesste.

    Das ist ein Unterschied z.B. zu externem CSS, wo Pfadangaben (z.B. zu Hintergrund-Bildern)
    von der CSS-Datei aus gesehen sind.

    Leider funzt das Include aber auch nicht, wenn ich die Angabe absolut eingebe, also so:
    http://www.fh-design.ch/html/content/blogger/includes/trackinfo.txt

    Includes mit absoluten ("http://...") Pfadangaben funktioniert AFAIK bei den meisten
     Providern/Einstellungen nicht.

    Gruesse,

    Thomas

    1. Hallo,

      Kleine Ergaenzung:

      Du solltest also in der ersten Include-Datei  den Pfad zur zweiten Include-Datei
      so angeben, wie er in der "aeussersten" Datei stehen muesste.

      Das steht uebrigens auch in der dclp-FAQ:
      Wie wende ich include() mit verschachtelten Verzeichnissen an?
      http://www.dclp-faq.de/q/q-datei-einbinden.html

      Gruesse,

      Thomas

      1. ÈÈ Das steht uebrigens auch in der dclp-FAQ:
        ÈÈ Wie wende ich include() mit verschachtelten Verzeichnissen an?
        ÈÈ http://www.dclp-faq.de/q/q-datei-einbinden.html
        ÈÈ
        ÈÈ Gruesse,
        ÈÈ
        ÈÈ Thomas

        Danke fŸr Deine Hilfe, leider hab ichs noch nicht ganz raus. Hab Dir noch ein Mail geschrieben, hoffe Du hast es gesehen.

        Gruss Fabian

        1. Hallo,

          Danke f&#65533;r Deine Hilfe, leider hab ichs noch nicht ganz raus. Hab Dir noch ein Mail geschrieben, hoffe Du hast es gesehen.

          So geht das nicht. Ich finde es egoistisch, das Forum zu verlassen
          und Fragen per Mail zu stellen.
          Hier im Forum koennen Dir mehr Leute besser helfen als ich alleine,
          und andere haben vielleicht auch etwas von der Antwort, wenn sie
          hier steht (und spaeter im Archiv).

          Also nochmal: Der Code und die relativen Pfadangaben darin
          muessen so sein, wie wenn sie im aufrufenden Skript stehen wuerden.

          Deshalb kannst Du das gleiche Include auch nicht in verschiedenen
          Hierarchie-Ebenen einbinden, wenn das Include ein zweites
          Include mit einer relativen Pfadangabe einbinden soll.

          Vielleicht kannst Du statt mit include() die zweite Datei mit einer anderen
          Funktion einbinden, z.B. mit readfile() oder einer anderen Funktion, bei
          der Du einen Pfad in Bezug auf das Dateisystem angeben kannst.
          http://www.php.net/manual/de/ref.filesystem.php

          Der Punkt ist dann, herauszufinden, wie der Pfadanfang in dem
          betreffenden Dateisystem heisst. (z.B. "/home/.../public_html/...")

          Eventuell helfen Dir dabei die folgenden Variablen weiter:
          $_SERVER["DOCUMENT_ROOT"]
          $_SERVER["SCRIPT_FILENAME"]
          $_SERVER["PATH_TRANSLATED"]
          bzw.
          $HTTP_SERVER_VARS["DOCUMENT_ROOT"]
          $HTTP_SERVER_VARS["SCRIPT_FILENAME"]
          $HTTP_SERVER_VARS["PATH_TRANSLATED"]

          Gruesse,

          Thomas

          1. Hi Thomas...

            Hatte mir eigentlich nur Deine Website angeguckt und gemerkt, dass Du  ziemlich aus der NŠhe kommst, und das ist ja nicht gerade Ÿblich in einem eigentlich deutschen Forum! Habe ja eh das gleiche auch noch hier im Forum gepostet, war eigentlich mehr dazu gedacht weil ich es hier nicht gerade sehr Ÿbersichtlich finde, aber egal. Jedenfalls bringt es mir ehrlich gesagt leider nichts wenn Du mir ein paar Variablen angibst von denen ich keine Ahnung habe wie man sie einsetzen kann, da ich ja wie gesagt null Ahnung von PHP habe und das eigentlich auch nur fŸr dieses Include benštige. WŠre also toll wenn Du mir noch eine etwas konkretere Lšsung hast oder natŸrlich auch jemand anders, denn ich kann mir nicht vorstellen, dass das wirklich so schwer sein soll. Besten Dank!

            Gruss Fabian