Problem

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

  • Problem

    Hallo,

    Ich hab hier eine kleine funktion geschrieben das mir rekursiv alle ordner und dateien anzeigt, und dabei alle endung mit .mp3 grün hervorheben lasse.
    Ich möchte dann ganz am schluß ein array haben, in dem der order und die datei drinnsteht.

    PHP-Code:
    define(ROOT"./");


    function 
    scan_dir($root$left=""){
        
    $dir opendir($root);
        
        while(
    $file=readdir($dir)){
            if (
    $file!="." AND $file!="..") {
                if (
    is_dir($root."/".$file)) {
                    echo 
    $left."<b>".$file."</b><br>";
                    
    scan_dir($root."/".$file$left.".");
                } elseif (!
    is_dir($file)) {
                    
    $endung strrchr ($file".");
                    if (
    $endung==".mp3") { 
    echo 
    "<font color=\"green\">".$left.$file."</font><br>"
                        
    $mp3s[] = array($root."/".$file$file);
                    } else { 
    echo 
    "<font color=\"gray\">".$left.$file."</font><br>"
                    }
                }
            }
        } 
    // while
        
        
    return $mp3s;
    }

    print_r($mp3s);

    echo 
    scan_dir(ROOT); 
    Aber wenn ich versuche mit print_r($mp3s); auszugeben, kommt nix.
    Wie kann das sein? wo liegt denn da der fehler?

    Ich hoffe ihr könnt mir helfen.

    gruß kevin

  • #2
    Schau Dir doch mal http://us4.php.net/manual/de/function.glob.php an

    Kommentar


    • #3
      Hi,

      Cool, aber ich mache das lieber so, denn da kann ich auch das ganze bei der ausgabe ein wenig übersichtlich halten.

      Aber du weißt nicht wo da der fehler liegt?

      gruß kevin

      Kommentar


      • #4
        Der Fehler ist da, weil dort wo du print_r() machst $mp3 leer ist, weil $mp3 dort überhaupt nicht existiert...

        Schau dir nochmal http://us4.php.net/manual/de/function.glob.php an überleg dir warum...

        BTW: Du solltest das nächste mal vielleicht einen aussagekräftigeren Titel für deinen Thread verwenden.

        Kommentar


        • #5
          OffTopic:
          hier korrelieren die programmiererischen fähigkeiten ja mal wieder wunderbar mit denen, sich einen sinnvollen thread-titel zu überlegen.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Hi,

            Ja, aber wieso ist denn $mp3s leer?
            Ich hab einen ordner mit mp3s angegeben, es wird ja auch grüne schrift ausgegeben, aber wieso wird dann das array nicht gefüllt?

            Gruß kevin

            Kommentar


            • #7
              Schau dir mal das hier an:
              http://us4.php.net/manual/de/functio...ing-values.php

              Kommentar


              • #8
                Original geschrieben von Kevin_K
                Ja, aber wieso ist denn $mp3s leer?
                Erst

                scan_dir(ROOT);

                dann

                print_r($mp3s);

                Kommentar


                • #9
                  @rrr: und selbst dann ist $mp3 noch leer...

                  Kommentar


                  • #10
                    Es ist nicht möglich, mehrere Werte von einer Funktion zurückzugeben. Ein ähnliches Resultat kann man aber durch die Rückgabe von Listen erreichen.
                    PHP-Code:
                    function kleine_zahlen()
                    {
                       return array (
                    012);
                    }
                    list (
                    $null$eins$zwei) = kleine_zahlen(); 

                    Kommentar


                    • #11
                      Ok, ich erklärs kurz...

                      Kevin_K hat sich eine Funktion geschrieben, die INTERN die Variable $mp3 benutzt. Soweit so gut. Ordungsgemäß gibt er die Variable auch mit RETURN zurück.

                      Der Rest seines Script weiß natürlich nichts von einer Variable $mp3, da diese ja nur innerhalb der Funktion scan_dir() existiert und der RETURN-Wert seiner Funktion ja in keine Variable geschrieben wird.

                      Kommentar


                      • #12
                        Hi,
                        ok, das hab ich jetzt mal anders gemacht:

                        PHP-Code:
                            define(ROOT$_GET["dir"]);

                            function 
                        scan_dir($root){
                                
                        $dir opendir($root);
                                
                                while(
                        $file=readdir($dir)){
                                    if (
                        $file!="." AND $file!="..") {
                                        if (
                        is_dir($root."/".$file)) {
                                            
                        scan_dir($root."/".$file);
                                        } elseif (!
                        is_dir($file)) {
                                            
                        $endung strrchr ($file".");
                                            if (
                        $endung==".mp3") { 

                                                
                        $mp3s[] = $file;
                                            }
                                        }
                                    }
                                } 
                        // while
                                
                        return isset($mp3s)?$mp3s:array("nixlos");
                                
                        closedir($handle);
                            }
                            
                            
                        $mp3 scan_dir(ROOT);
                            
                        print_r($mp3); 
                        Aber es geht immer noch nicht .
                        Aber wenn ich an der stelle wo das array gefüttert wird, ein echo ausgebe mit $file, wird der dateiname aber ausgegeben.

                        gruß kevin
                        Zuletzt geändert von Kevin_K; 26.06.2005, 15:22.

                        Kommentar


                        • #13
                          was soll denn dieser isset-unfug jetzt wieder beim return?

                          - am anfang der funktion array anlegen, $mp3s = array();
                          - in schleife befüllen, $mp3s[] = ...
                          - return $mp3s;
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            isset ist wirklich nicht sonderlich sinnvoll. vielleicht mit count() die Anzahl grüßer 0 überprüfen oder sowas - nen leeren array zurück geben macht imho nämlich auch keinen sinn.... wenn dann sollte man in dem fall false zurück geben...

                            Kommentar


                            • #15
                              Hi,

                              @wahsaga:
                              Ja, schön, aber es geht nur nicht. es will nicht befüllt werden.

                              @prego:
                              Jo, aber da wollt ich nur sehen, ob das mp3s[] überhaupt angerührt wird.

                              Ahh, ich seh grad, wenn ich mp3´s in das verzeichnis lege, in dem das script liegt, funktioniert es. aber in unterverzeichnissen nicht.
                              kann es sein das das script irgendwie abbricht?

                              Gruß kevin

                              Kommentar

                              Lädt...
                              X