Mcleod: include verzeichnis mit variable geht nicht

Ich möchte ein Verzeichnispfad per Variable übergeben.
Was ich nicht verstehe:
Im ersten include kann ich NICHT ../".$dir."/ schreiben aber
Im zweiten include klappt es einwandfrei !!

[code lang=php
include ("../dl/user_pass.php");
include("../".$dir."/'" . $liga_nr . "'_player.php");

[/code]

Alles beiden includes stehen im selben code untereinander.
$dir kommt per echo auch korrekt an. Also: $dir=dl (in diesem Fall)

Hintergrund:
ich übergebe $dir und $liga_nr an ein EDIT Script das sich selber bei SUBMIT aufruft und änderungen in der user_pass.php vornimmt. Die Daten werden per POST übergeben.

  1. Moin!

    Bist Du sicher: include("../".$dir."/'" . $liga_nr . "'_player.php");

    Da kommt $dir='foo'; und $liga_nr=11; so was raus:

    include("../foo/'11'_player.php");

    Ich bin irgendwie der Meinung, das ist nicht das, was Du willst.

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Moin!

      Bist Du sicher: include("../".$dir."/'" . $liga_nr . "'_player.php");

      Da kommt $dir='foo'; und $liga_nr=11; so was raus:

      include("../foo/'11'_player.php");

      Ich bin irgendwie der Meinung, das ist nicht das, was Du willst.

      Doch. Genau das klappt ja. Nur nicht im ersten include. Da muss ich das Verzeichnis manuell angeben. Und das soll aber $dir machen.

      1. Moin!

        Doch. Genau das klappt ja. Nur nicht im ersten include. Da muss ich das Verzeichnis manuell angeben. Und das soll aber $dir machen.

        Ich wüsste nicht, was einem

        $file='../' . $dir . '/user_pass.php';  
        if ( ! include ($file) ) {  
            if (! is_file($file) ) {  
                die ("<hr />Fatal: $file ist keine Datei: __FILE__ : __ROW__ </hr>";  
            } elseif (! is_readable ($file) ) {  
                die ("<hr />Fatal: $file ist nicht lesbar: __FILE__ : __ROW__ </hr>";  
            } else {  
                die ("<hr />Aus unerfindlichen Grund konnte $file in __FILE__ nicht inkludiert werden.</hr>";  
            }  
        }
        

        entgegen steht.

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix

        1. Moin!

          Ach so: Ähnlich wertvolle Hinweise erhält man, wenn man das Error-Reporting auf E_All setzt:

          error_reporting(E_ALL);

          und statt include require verwendet. Wahrscheinlich  Bitte informiere Dich auch über include_once und require_once.

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix

  2. Hi!

    Im ersten include kann ich NICHT ../".$dir."/ schreiben aber
    Im zweiten include klappt es einwandfrei !!

    Wenn du dir nicht sicher bist, was du da zusammenbaust - include bekommt letzlich einen String. Den kannst du auch zunächst in einer Variable zusammen, deren Inhalt du dir zur Kontrolle ausgeben kannst.

    Oder etwas einfacher: Schreib var_dump statt include und teste solange mit dem String-Audruck bis das Ergebnis korrekt aussieht. Dann nimm wieder include.

    Lo!

    1. Hi!

      Im ersten include kann ich NICHT ../".$dir."/ schreiben aber
      Im zweiten include klappt es einwandfrei !!

      Wenn du dir nicht sicher bist, was du da zusammenbaust - include bekommt letzlich einen String. Den kannst du auch zunächst in einer Variable zusammen, deren Inhalt du dir zur Kontrolle ausgeben kannst.

      »»
      echo $dir; klappt einwandfrei. Da bekomme ich den String den ich brauche.
      Nur nicht im im ersten include. da muss ich das Verzeichnis manuell angeben, damit es geht. *verwirrt bin

      Oder etwas einfacher: Schreib var_dump statt include und teste solange mit dem String-Audruck bis das Ergebnis korrekt aussieht. Dann nimm wieder include.

      »»
      include ("../".$dir."/user_pass.php");
      mit:
      var_dump gibt aus: dlstring(19) "../dl/user_pass.php"
      und das wäre auch korrekt !!

      *weiter verwirrt

      1. Hi!

        var_dump gibt aus: dlstring(19) "../dl/user_pass.php"
        und das wäre auch korrekt !!

        Dann musst du nun noch spezifizieren, was daran nicht klappt. include funktioniert übrigens vom Startort des aufgerufenen Script aus, nicht vom Ort der aktuellen Datei.

        Lo!

        1. Hi!

          var_dump gibt aus: dlstring(19) "../dl/user_pass.php"
          und das wäre auch korrekt !!

          Dann musst du nun noch spezifizieren, was daran nicht klappt. include funktioniert übrigens vom Startort des aufgerufenen Script aus, nicht vom Ort der aktuellen Datei.

          Klar Lo,
          es wird als Fehler eine user_pass.php aus dem übergeordneten Verzeichnis von Verzeichnis "dl" benutzt wenn ich $dir einsetze. Wenn ich ../dl/ nehme klappt es.

          Vllt erkläre ich es so:

          card_edit liegt im Ordner: ../xx/mod/ (die spreche ich an)

          user_pass.php liegt im Ordner ../xx/dl/ (klappt nur wenn ich dl manuell angebe)
          'liga_nr'_player.php liegt im Ordner ../xx/dl/ (klappt)

          Wenn ich ../".$dir."/user_pass.php nehme:
          Dann nimmt das script die datei: ../xx/user_pass.php

          1. Moin!

            Wir kennen Deine Verzeichnis- und include-Struktur nicht.

            Möglicherweise ist für Dein Debugging Wissen über magic-constants nötig.

            Weiter: $_SERVER["SCRIPT_FILENAME"] liefert den Name und den Pfad des gerde ausgeführten Skriptes, womöglich also des Skriptes in welches womöglich das Skript schon inkludiert ist, welches (da liegt Dein Problem) ein weiteres inkludieren soll.

            Den Pfad musst Du nämlich von $_SERVER["SCRIPT_FILENAME"] aus und nicht etwa von __FILE__ (das machst Du womöglich) ausgehend bestimmen.

            Ist verwirrend, ist aber auch genau so. Und zwar "Deshalb!".

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix

            1. Ich habs selber doch rausgefunden ich Depp.

              Da sich das Script per Submit selber aufruft und dann die user_pass.php beschreibt, habe ich vergessen bei

              if ($_POST['submit']) { blablaba  
              
              ~~~ nochmal `include ("../".$dir."/user_pass.php");`{:.language-php} anzugeben.  
                
              Kleine Ursache und doch grosse Wirkung.  
                
              Aber vielen lieben Dank für eure freundliche Unterstützung
              
              1. Moin!

                Da sich das Script per Submit selber aufruft und dann die user_pass.php beschreibt, habe ich vergessen bei

                if ($_POST['submit']) { blablaba

                  
                
                > Kleine Ursache und doch grosse Wirkung.  
                  
                [Und lächerlich ganz einfach zu finden.](https://forum.selfhtml.org/?t=200550&m=1351841) Hier anhand der fehlenden Fehlermeldung.  
                  
                Kommentar gefällig?  
                Affenscripte sind der frühe Tod des Webentwicklers.  
                  
                  
                MFFG (Mit freundlich- friedfertigem Grinsen)  
                  
                fastix  
                
                -- 
                [Des fastix kleines CMS](http://www.fastix.org/fastix-cms/)
                
          2. Hi!

            card_edit liegt im Ordner: ../xx/mod/ (die spreche ich an)

            Das nützt mir nicht viel, weil ich damit noch nicht weiß, welches das gerade aktuelle Verzeichnis ist. Mach doch mal ein echo getcwd(); vor dem include. Von dem aus muss sich dann die zu inkludierende Datei finden lassen.

            Lo!