Dateien auflisten - bestimmte aber weglassen...

Dieses Thema im Forum "Webentwicklung" wurde erstellt von avoir, 2. Mai 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. Mai 2006
    Hey ho...
    Bin ziemlicher Neuling was PHP angeht und deshalb hab ich gehofft, dass mir hier jemand helfen kann.

    Und zwar möchte ich, dass mir ein PHP-script alle Dateien in einem bestimmten Ordner auflistet, allerdings sollen Dateien mit bestimmter Endung (z.B. *.jpg) nicht aufgelistet werden.

    Bis jetzt sieht mein Code so aus:
    Er listet alle Dateien, bis auf ".", ".." und "index.php" auf und erstellt einen Link zu ihnen.

    PHP:
    <? php
     
    $dir 
    "." ;
    $files  = array();
    $verz = opendir ( $dir );

    while(
    $file  readdir ( $verz )){
      if(
    $file  !=  '.'  &&  $file  !=  '..'  &&  $file  !=  'index.php' )
        
    array_push ( $files , $file );
    }
    closedir ( $verz );

    echo 
    'Inhalt:<br><br>' ;
        
    foreach(
    $files  as  $single_file )
        echo 
    '<a href="' . $single_file . '">' . $single_file . '</a><br>' ;
        
    echo 
    '<br>' ;
    echo 
    '<br>' ;
    echo 
    '<br>' ;
    echo 
    '<br>' ;    
        


    ?>
     
  2. 2. Mai 2006
    Hi,
    ich denke du kommst am besten, wenn du dir eine Funktion schreibst die überprüft ob die Endung um Dateinamen vorhanden ist und "wahr" oder "falsch" zurück gibt. Eine Möglichkeit wäre den Dateinamen am Punkt aufzusplitten. Das geht mit der Funktion "explode". Du erhälst dann ein Feld mit den Elementen, die im String durch einen Punkt getrennt wurden. Da im Dateinamen mehrere Punkte vorhanden sein können ist nicht das zweite Element automatisch die Endung, sondern das letzte Element. Dieses erhälst du mit der Funktion "array_pop". Das letzte Element muss man nun nur noch mit mit der gewünschten Endung vergleichen und wahr oder falsch zurück geben. Zwei Strings vergleichen kannst du mit "==" (unsicher) oder mit einer Funktion wie "stristr".

    //edit achja:
    stristr überprüft ob ein String innerhalb eines anderen Strings vorkommt. Die Funktion ist also nicht die beste Lösung. (Mir fällt nur gerade keine bessere ein xD) Hier stehts genau erklärt: Drücken Wenn die Endung blgifub heißen würde und gif aussortiert werden soll, so würde blgifub auch aussortiert werden.^^

    So ich hoffe, dass war verständlich.^^ :]

    Eine Beispiellösung habe ich mal darunter gepostet. Versuche es aber lieber es erst einmal selbst.

    greetz blackbone

    PHP:
    <? php
    //Funktion gibt true zurueck, wenn die Endung im Namen enthalten ist
    function  endung ( $name , $end ){
     
    $name_feld  explode ( '.' , $name );  //Zerlegen des Namens
     
     
    if( stristr ( array_pop ( $name_feld ), $end ))     //Vergleich des letzten Elements des Namens mit der Endung
      
    return  true //Endung stimmt überein
     
    else
      return 
    false //Endung stimmt nicht überein
    };


    $dir  "." ;
    $files  = array();
    $verz = opendir ( $dir );

    while(
    $file  readdir ( $verz )){
      if(
    $file  !=  '.'  &&  $file  !=  '..'  &&  $file  !=  'index.php'  && ! endung ( $file , "gif" ))
        
    array_push ( $files , $file );
    }
    closedir ( $verz );

    echo 
    'Inhalt:<br><br>' ;

    foreach(
    $files  as  $single_file )
        echo 
    '<a href="' . $single_file . '">' . $single_file . '</a><br>' ;

    echo 
    '<br>' ;
    echo 
    '<br>' ;
    echo 
    '<br>' ;
    echo 
    '<br>' ;



    ?>
     
  3. 2. Mai 2006
    Vielen vielen Dank für die schnelle Hilfe

    hab mir deine Version mal durchgeschaut und denk grad nur: "Respekt!" ^^
    Auf die function wär ich nie im Leben gekommen

    Habs jetzt allerdings mit ner anderen Möglichkeit zum laufen gebracht... ein Kumpel hat einfach kurz die Zeile eingefügt.... und wupps liefs...

    PHP:
    while( $file  readdir ( $verz )){
      if(
    $file  !=  '.'  &&  $file  !=  '..'  &&  $file  !=  'index.php' )
          if(!
    eregi ( ".jpg" , $file ))
            {
            
    array_push ( $files , $file );
            }
    }
    Jetzt stellt sich mir allerdings ein anderes Problem, was nich unbedingt mit dem Topic zu tun hat, aber wayne.... vielleicht weiste ja da auch Bescheid


    Und zwar:
    Ich hab in dem Ordner eine Datei namens "aaa.wmv" und eine namens "bbb.wmv" liegen.
    Außerdem liegt in dem Ordner die Datei "aaa.wmv.jpg" (also ein kleines Bildchen)

    Der soll jetzt außerdem schauen, ob ein solches Bild vorhanden ist, und wenn ja, es mir keinen Textlink, sondern einen "Bild-Link" geben soll.

    Mein Problem ist aber.... das klappt nich

    Meine ersten Versuche sahen so aus:

    PHP:
    <? php
    $dir 
    "." ;
    $files  = array();
    $verz = opendir ( $dir );

    while(
    $file  readdir ( $verz )){
      if(
    $file  !=  '.'  &&  $file  !=  '..'  &&  $file  !=  'index.php' )
          if(!
    eregi ( ".jpg" , $file ))
            {
            
    array_push ( $files , $file );
            }
    }
    closedir ( $verz );

    echo 
    'Inhalt:<br><br>' ;
        
    foreach(
    $files  as  $single_file )
        {
        echo 
    $single_file . '<br>' ;
        if(
    file_exists ( $single_file + '.jpg' ))
            echo 
    '<a href="' . $single_file . '"><img src="' . $single_file . '.jpg"></img></a><br><br>' ;
        else
            echo 
    '<a href="' . $single_file . '">' . $single_file . '</a><br><br>' ;
        }
    ?>
    Das klappt so aber nicht...
     
  4. 2. Mai 2006
    Beim durchlesen ist mir gerade aufgefallen, dass du mit "+" anstatt mit dem in PHP üblichem "." zwei strings aneinanderhängen willst. Der richtige Code würde ohnem den von mir gefundenen Fehler so heissen:
    PHP:
    <? php
    $dir 
    "." ;
    $files  = array();
    $verz = opendir ( $dir );

    while(
    $file  readdir ( $verz )){
      if(
    $file  !=  '.'  &&  $file  !=  '..'  &&  $file  !=  'index.php' )
          if(!
    eregi ( ".jpg" , $file ))
            {
            
    array_push ( $files , $file );
            }
    }
    closedir ( $verz );

    echo 
    'Inhalt:<br><br>' ;
        
    foreach(
    $files  as  $single_file )
        {
        echo 
    $single_file . '<br>' ;
        if(
    file_exists ( $single_file . '.jpg' ))
            echo 
    '<a href="' . $single_file . '"><img src="' . $single_file . '.jpg"></img></a><br><br>' ;
        else
            echo 
    '<a href="' . $single_file . '">' . $single_file . '</a><br><br>' ;
        }
    ?>
     
  5. 2. Mai 2006
    Ahhhhhh Super !!!

    In Delphi musste man glaube ich 2 Strings mit "+" verbinden... naja, egal, das merk ich mir jetzt THX

    10er hab ich verteilt
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.