Ankündigung

Einklappen
Keine Ankündigung bisher.

Beim Verzeichnis auslesen Dateinamen unterscheiden

Einklappen

Neue Werbung 2019

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

  • Beim Verzeichnis auslesen Dateinamen unterscheiden

    Hallo zusammen!

    Ich möchte auf einer Seite meiner Homepage eine Reihe Thumbnails anzeigen lassen,
    die dann mit den Bildern in Originalgröße verlinkt werden sollen.

    Das jeweilige Verzeichnis wird über die URL übergeben:

    PHP-Code:
        $ordner "images/outlines/" $_GET['cat'] . "/";
        
    $dir_handle opendir($ordner);

        echo 
    "<p>";
        
        while (
    $filename readdir($dir_handle))
        {
            if (
    $filename != '..' && $filename != '.')
            {
            echo 
    '<img src="images/outlines/' $_GET['cat'] . '/' $filename '" alt="' $serie '" />';
            }
        }
            
        echo 
    "</p>";
        
    closedir($dir_handle); 
    Soweit bin ich schonmal ^^"

    Dabei werden jetzt noch alle Bilder aus dem entsprechenden Verzeichnis ausgelesen.
    Das Problem ist, dass das sowohl Thumbnails, als auch die großen Bilder sind.

    Die Grafiken unterscheiden sich folgendermaßen:

    Thumbnails: 01_.jpg, 02_.jpg, 03_.jpg, ...
    Normalgröße: 01.jpg, 02.jpg, 03.jpg, ...

    Bei den Thumbnails ist also immer noch ein "_" mit drin.

    Ich habe leider noch überhaupt keine Erfahrung mit dem Zerschnippeln von Dateinamen,
    wie bekomme ich es hin, dass die Thumbnails als <img>-Tag und die großen Bilder als Link darum ausgelesen werden?

    Sollte dann so aussehen:

    <a href="01.jpg"><img src="01_.jpg" /></a>
    <a href="02.jpg"><img src="02_.jpg" /></a>
    ...

    Ich hoffe, mir kann da jemand weiterhelfen.


  • #2
    Du kannst zum Beispiel pathinfo() verwenden, um den Namen des Thumbnails zu bilden
    PHP-Code:
    $pi pathinfo($f);
    $thumb $pi['filename'] . '_.' $pi['extension']; 

    Kommentar


    • #3
      Ich hab den Code mal ausprobiert, allerdings scheine ich irgendwas falsch gemacht zu haben:

      PHP-Code:
          while ($filename readdir($dir_handle))
          {
              if (
      $filename != '..' && $filename != '.')
              {
              
      $pi pathinfo($f);
              
      $thumb $pi['filename'] . '_.' $pi['extension'];          
              echo 
      '<a href="images/outlines/' $_GET['cat'] . '/' $filename '>';
              echo 
      '<img src="images/outlines/' $_GET['cat'] . '/' $thumb '" alt="' $serie '" />';
              echo 
      '</a>';
              }
          } 
      Das Ergebnis sieht nämlich so aus:

      Code:
      <a href="images/outlines/4/01.jpg"><img src="images/outlines/4/_." alt="Burst Angel"></a>
      <a href="images/outlines/4/01_.jpg"><img src="images/outlines/4/_." alt="Burst Angel"></a>
      <a href="images/outlines/4/02.jpg"><img src="images/outlines/4/_." alt="Burst Angel"></a>
      <a href="images/outlines/4/02_.jpg"><img src="images/outlines/4/_." alt="Burst Angel"></a>
      Wie man sieht, wird der Dateiname komplett durch "_." ersetzt,
      außerdem wird nicht nur auf die großen Dateien, sondern auch auf die Thumbnails verlinkt...

      (Man sollte irgendwie prüfen, ob in der Datei ein "_" vorhanden ist. Wenn nicht, sollte diese Datei in den <a>-Tag,
      danach sollte das "_" reingebastelt werden und diese Datei dann in den <img>-Tag).

      Wie genau muss ich diesen Code anwenden?

      Kommentar


      • #4
        Vermutlich hast Du eine veraltete PHP-Version, bei der es das Element filename noch nicht gibt.
        PHP-Code:
        <?php echo phpversion(); ?>

        Kommentar


        • #5
          Nein, ich hatte vergessen, das $f in $filename zu ändern ^^"

          Naja, jetzt werden zumindest teilweise die Thumbnails richtig verlinkt,
          aber leider einmal zuviel, er sollte beim auslesen nur die Dateien ohne "_" nehmen,
          sonst passiert folgendes:

          Code:
          <a href="images/outlines/4/01.jpg"><img src="images/outlines/4/01_.jpg" alt="Burst Angel"></a>
          <a href="images/outlines/4/01_.jpg"><img src="images/outlines/4/01__.jpg" alt="Burst Angel"></a>
          <a href="images/outlines/4/02.jpg"><img src="images/outlines/4/02_.jpg" alt="Burst Angel"></a>
          <a href="images/outlines/4/02_.jpg"><img src="images/outlines/4/02__.jpg" alt="Burst Angel"></a>

          Kommentar


          • #6
            Du kannst mit glob() alle Dateien mit *_.jpg auslesen und dann mit substr() das letzte Zeichen von filename abschneiden.

            Kommentar


            • #7
              Entschuldige, wenn ich mich hier gerade ziemlich blöd anstelle,
              aber ich weiß leider überhaupt nicht, wo und wie ich diese Funktionen anwenden muss...

              Könntest du mir den Code vielleicht komplett aufschreiben? ^^"

              Kommentar


              • #8
                Zitat von Teela Beitrag anzeigen
                Könntest du mir den Code vielleicht komplett aufschreiben? ^^"
                Dann lernst du es halt. Das Forum ist da, um helfen Probleme zu lösen, nicht um dir deinen Code zu schreiben.
                Also schau mal glob(), strpos(), str_replace() und substr() an
                Gruss
                L

                Kommentar


                • #9
                  Zitat von lazydog Beitrag anzeigen
                  Dann lernst du es halt. Das Forum ist da, um helfen Probleme zu lösen, nicht um dir deinen Code zu schreiben.
                  Also schau mal glob(), strpos(), str_replace() und substr() an
                  Herzlichen Dank. Das Manual kenne ich auch, leider hat es mir nicht besonders weitergeholfen...

                  Fangen wir doch gleich mal mit glob() an.
                  Ich hab den Code aus dem Manual genommen und angepasst:

                  PHP-Code:
                      while ($filename readdir($dir_handle))
                      {
                          foreach (
                  glob("*_.jpg") as $filename)
                          {
                              if (
                  $filename != '..' && $filename != '.')
                              {    
                              echo 
                  '<a href="images/outlines/' $_GET['cat'] . '/' $filename '" rel="lightbox[outlines]">';
                              echo 
                  '<img src="images/outlines/' $_GET['cat'] . '/' $filename '" alt="' $serie '" />';
                              echo 
                  '</a>';
                              }
                          }
                      } 
                  Jetzt müssten (meinem Verständnis nach) alle Dateien mit der Endung "_.jpg" ausgelesen werden.

                  Passieren tut... gar nichts. Im wahrsten Sinne des Wortes.
                  Wo vorher noch etwas ausgelesen wurde, wird jetzt gar nichts mehr angezeigt.

                  Meine Frage war einfach nur, wie schon vorher, wie und wo ich diesen Code benutzen muss.
                  Eine Hilfe wäre es (meiner Meinung nach), die richtige Verwendungsart des Codes aufzuschreiben.
                  Wenn das zu viel verlangt ist, dann tut es mit Leid, aber ich komme so nicht weiter...

                  Kommentar


                  • #10
                    Zitat von Teela Beitrag anzeigen
                    Ich hab den Code aus dem Manual genommen und angepasst:
                    Hast du in diesem Code irgendwo ein opendir() gesehen? Oder ein readdir? Eine While-Schleife um die foreach()-Schleife gibt es auch nicht.
                    Deine Pattern wären sonst korrekt, so dass auch «..» und «.» nicht mehr ausgelesen werden.
                    Gruss
                    L

                    Kommentar


                    • #11
                      PHP-Code:
                          $ordner "images/outlines/" $_GET['cat'] . "/";
                          
                      #$dir_handle = opendir($ordner);

                          
                      echo "<p class='img'>";
                          
                          
                      #while ($filename = readdir($dir_handle))
                          #{
                              
                      foreach (glob("*_.jpg") as $filename)
                              {
                                  if (
                      $filename != '..' && $filename != '.')
                                  {    
                                  echo 
                      '<a href="images/outlines/' $_GET['cat'] . '/' filename '" rel="lightbox[outlines]">';
                                  echo 
                      '<img src="images/outlines/' $_GET['cat'] . '/' $filename '" alt="' $serie '" />';
                                  echo 
                      '</a>';
                                  }
                              }
                          
                      #}
                              
                          
                      echo "</p>";
                          
                      #closedir($dir_handle); 
                      Ok, aber wenn ich die while-Schleife, sowie das opendir() weglasse,
                      wie liest er dann überhaupt den Ordner aus?
                      Funktionieren tut es so auf jeden Fall noch nicht, da fehlt irgendwas...

                      Kommentar


                      • #12
                        Zitat von Teela Beitrag anzeigen
                        ..da fehlt irgendwas...
                        Ja, und da ist auch des Manual etwas zu knapp, du musst natürlich entweder in dem entsprechenden Verzeichnis stehen, oder diese mit den Pattern angeben. Also etwa so:
                        PHP-Code:
                        $cat $_GET['cat'];
                        $dir getcwd();
                        chdir($ordner); 
                        foreach (
                        glob("*_.jpg") as $filename){ 
                            echo 
                        "<a href='images/outlines/$cat/$filename'>; 
                                  <img src='images/outlines/
                        $cat/$filename' alt='$serie' /></a>"

                        chdir($dir); 
                        Gruss
                        L

                        Kommentar


                        • #13
                          Das chdir würde ich weglassen.
                          PHP-Code:
                          $ordner "images/outlines/" $_GET['cat'] . "/";
                          foreach(
                          glob($ordner.'*_.jpg') as filename
                          Und ganz dringend: kontrollieren, dass $_GET['cat'] keine unerwünschten Zeichen enthält.
                          Am einfachsten ist es, wenn Du cat auf Ziffern beschränken kannst.
                          PHP-Code:
                          $ordner "images/outlines/" intval($_GET['cat']) . "/" 

                          Kommentar


                          • #14
                            Ok, ich habs jetzt mal so gemacht:

                            PHP-Code:
                                    foreach (glob($ordner.'*_.jpg') as $filename)  
                                    {
                                        if (
                            $filename != '..' && $filename != '.')
                                        {
                                        echo 
                            '<a href="images/outlines/' $_GET['cat'] . '/' $filename '" rel="lightbox[outlines]">';
                                        echo 
                            '<img src="images/outlines/' $_GET['cat'] . '/' $filename '" alt="' $serie '" />';
                                        echo 
                            '</a>';
                                        }
                                    } 
                            Ausgelesen wird es zwar (auch die richtige Anzahl),
                            aber die Variable $filename ist immer leer,
                            folglich werden die Bilder nicht angezeigt

                            Irgendwo muss immer noch ein Fehler drin sein...

                            Kommentar


                            • #15
                              Erstmal eine Rückfrage
                              if ($filename != '..' && $filename != '.')
                              Wofür ist das gut?
                              (Bitte gründlich darüber nachdenken. Es ist eine rethorische Frage.)



                              Kommentar

                              Lädt...
                              X