is_dir funktioniert nicht richtig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • is_dir funktioniert nicht richtig

    Hallo,

    es ist zum Mäuse melken.
    Ich habe folgende Funktion:

    PHP-Code:
    $dirs = array();
    $handles opendir('../');
    while (
    false !== ($dir readdir($handles))) {
             if (
    is_dir($dir)) {
                     
    $dirs[] = $dir;
             }

    Das Problem ist, dass mir nur ein Array mit 2 Verzeichnissen gebaut wird.

    Wenn ich die is_dir Bedingung entferne, gibt er mir den gesamten Verzeichnisinhalt zurück. Mit allen 10 Verzeichnissen.

    Alle Verzeichnisse haben die selben Rechte und auch die selbe Gruppe / Besitzer.

    Das Problem ist demnach: is_dir gibt mir von den vorhandenen 10 Verzeichnissen nur 2 zurück.
    Lasse ich is_dir weg, bekomme ich ein Array mit 10 Verzeichnissen und allen Dateien im Verzeichnis.

    Ich habe es lokal mit xampp sowie auf dem Server mit apache2 im Einsatz und es ist bei beiden das selbe Phenomen.

    Gibt es eine andere Möglichkeit die Verzeichnisse aus einem Verzeichnis einzulesen?

    Vielen Dank im Voraus für Eure Hilfe.

    Grüsse
    Francosdad

  • #2
    if (is_dir('../' . $dir)) {

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      probier es mal mit scandir()
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        oder mit:

        PHP-Code:
        $dirs glob('../*',GLOB_ONLYDIR); 
        Wir werden alle sterben

        Kommentar


        • #5
          Danke, Danke, Danke ....

          PHP-Code:
          $dirs glob('../*',GLOB_ONLYDIR); 
          Funktioniert super!

          So, da Ihr mir geholfen habt, komme ich wieder.

          Grüße
          Francosdad

          Kommentar


          • #6
            PHP-Code:
            is_dir() 
            verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück.

            Kommentar


            • #7
              PHP: is_dir() verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück. francosdad
              Das verstehe ich schon, aber die Frage stellt sich ja, warum is_dir bei 8 Verzeichnissen false zurück gibt und bei 2 true?! Obwohl alle Verzeichnisse im selben Pfad liegen!

              Die Variante mit glob funktioniert eigentlich besser, da das Array mir fertig geliefert wird und ich es nicht erst mit einer Schleife bauen muß.

              Gruß
              Francosdad

              Kommentar


              • #8
                verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück.
                Nö, funktioniert auch super mit relativen Pfaden. Allerdings hat der TO der Funktion den falschen Pfad übergeben, wie ghostgambler schon gezeigt hat. Das zwei Verzeichnisse gefunden werde liegt wohl daran, dass auch im aktuellen Arbeitsverzeichnis zwei mit dem selben Namen vorhanden sind.

                Kommentar


                • #9
                  Er bewegt sich im richtigen Verzeichnis! Das habe ich ganz einfach getestet, indem ich eines der beiden Verzeichnisse im gewünschten Pfad umbenannt habe und er mir diese Umbenennung auch im Array anzeigt.

                  Der andere Punkt ist der, dass wenn ich !is_dir schreibe, gibt er mir alle Dateien des Verzeichnisses aus.

                  Fazit: Er ist auf jeden Fall im richtigen Verzeichnis! Und genau das bereitet mir ja Kopfschmerzen!

                  Gruss
                  Francosdad

                  Kommentar


                  • #10
                    Er bewegt sich im richtigen Verzeichnis!
                    readdir gibt dir immer nur den Datei-/Verzeichnisnamen zurück, nicht den kompletten Pfad. Und wenn du ein anderes Verzeichnis wie das aktuelle öffnest und du das Ergebnis von readdir an is_dir weiterreichst, so sucht diese Funktion natürlich im aktuellen Arbeitsverzeichnis. Das du zwei Treffer erhälst könnte vielleicht auch daran liegen, dass readdir die beiden Einträge . und .. liefert. Ein var_dump($dirs) nach der Schleife wird dir das bestimmt bestätigen.

                    Kommentar


                    • #11
                      Danke für eure Anregungen, aber ich muß jetzt mal was feststellen:

                      1. . und .. zähle ich nicht mit dazu!
                      2. Er ist im richtigen Verzeichnis!!! und gibt mir exakt nur 2 Verzeichnisnamen (neben . und ..) zurück!
                      3. var_dump und print_r habe ich probiert und ergibt mir . und ..; sowie die zwei Verzeichnisse zurück -> Also 4 Strings im Array
                      4. Im aktuellen Arbeitsverzeichnis gibt es die beiden zurückgegebenen Verzeichnisnamen nicht

                      Genau das macht mich ja fertig! Ich habe gestern den ganzen Tag an der Funktion rumgemacht!

                      Wechsle ich das Verzeichnis, dann gibt er mir aus dem anderen alle Verzeichnisse korrekt aus.

                      Ich glaube das hat irgendwas mit dem Cache oder mit Rechten zu tun, obwohl ich Testweise allen Verzeichnissen die 0777 gegeben habe und die Besitzer sind auch identisch.

                      Aber egal, ich arbeite jetzt mit GLOB.

                      Grüße Francosdad

                      Kommentar


                      • #12
                        2. Er ist im richtigen Verzeichnis!!!
                        Quatsch!

                        Ich glaube das hat irgendwas mit dem Cache oder mit Rechten zu tun,
                        Quatsch!
                        Wir werden alle sterben

                        Kommentar


                        • #13
                          quote:2. Er ist im richtigen Verzeichnis!!! Quatsch!
                          Jetzt stellt sich mir aber die Frage in welchem Verzeichnis er ist, denn die angezeigten Ordner existieren nur im root verzeichnis!

                          Ich werde das mal skizzieren:

                          root pfad: /media/sda3/xampp/xampp/htdocs/aiot/

                          darunter liegen folgende verzeichnisse:

                          /admin
                          /cache
                          /download
                          /export
                          /icons
                          /images
                          /import
                          /inc
                          /includes
                          /lang
                          /media
                          /mysqldumper
                          /ProgressBar
                          /pub
                          /Smarty_Plugins
                          /templates
                          /templates_c
                          /Update-zur-Fax-Erweiterung
                          /upload
                          /zend

                          Unter /admin liegt meine PHP Datei, welche die Datei functions.php required, welche wiederum unter:

                          /admin/EG/import

                          liegt.

                          Die functions.php enthält folgende Funktion:

                          PHP-Code:
                          function getdirectory() {

                              global 
                          $dirs;
                              
                          $dirs = array();
                              
                          $handles opendir('/media/sda3/xampp/xampp/htdocs/aiot/'); // import Verzeichnis im Stammpfad
                                  
                          while ($dir readdir($handles)) {
                                      if (
                          $dir != "." && $dir != ".." && is_dir($dir)) { // Bitte nur csv Dateien
                                          
                          $dirs[] = $dir// Mach ein Array aus den einzelnen Dateien
                                      
                          }
                                  }
                              
                          closedir($handles);
                              
                          var_dump ($dirs); // zum Test
                              
                          return $dirs// Liefere das Array mit den Dateien als Resultat der Funktion zurück

                          Das var_dump gibt folgende Verzeichnisse zurück:

                          import
                          images
                          include

                          Wenn ich jetzt das Verzeichnis images unter dem root-Pfad in imagess umbenenne, dann gibt var_dump:

                          import
                          includes

                          aus!

                          Und genau das verstehe ich nicht! Ich denke, dass ich unter opendir() den root-Pfad angegeben habe. Trotzdem werden nur 3 Verzeichnisse ausgegeben.
                          Wenn ich das Verzeichnis images umbenenne, und zwar im root-Pfad, dann wird es nicht mehr ausgegeben.

                          Jetzt würde mich interessieren wo der QUATSCH den Fehler hat, bzw. welche Erklärung es dazu gibt.

                          Grüße Francosdad

                          Kommentar


                          • #14
                            Dein aktuelles VZ ist /admin/EG/import
                            Du öffnest das VZ /
                            Du kriegst alle Verzeichnisnamen daraus zurück, und überprüfst dann mit is_dir nur auf den Dateinamen - ohne die Ordnerangabe - heißt er sucht die Datei in /admin/EG/import und im include-Pfad, aber nicht in /

                            Du verwendest die Funktion einfach falsch, und behauptest dann irgendwelche undefinierten Dinge wären dran Schuld...

                            Mein erster Post enthält schon die Antwort, auf die aber scheinbar nicht mal wirklich Hirnschmalz geopfert wurde.

                            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                            Wie man Fragen richtig stellt

                            Kommentar


                            • #15
                              Ja, Du hast Recht!

                              Das Problem ist, dass man es auch kapieren muss!

                              Nach Deinem wiederholten Hinweis auf dein erstes Posting habe ich es auch verstanden.

                              Sorry, aber manchmal rollt die Kugel halt etwas langsamer.

                              Trotzdem Danke an alle und Grüße.

                              Francosdad

                              Kommentar

                              Lädt...
                              X