• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Aus Verzwichnis Geladene Bilder Sortieren

Status
Für weitere Antworten geschlossen.

MoeMoe

Neues Mitglied
Hi,

ich habe ein Script geschrieben was mir es möglich macht aus einem Verzeichnis auf einem Server Bilder zu laden.

Nun ist das Problem das die Bilder alle Links an der seite einfach untereinander angezeigt werden, nun möchte ich die Bilder auflisten also als beispiel:

Bild1 Bild2 Bild3 Bild4 Bild5
Bild7 Bild8 Bild9 Bild10 Bild11
Bild12 Bild13 Bild14 Bild15 Bild16
Bild17 Bild18 Bild19 Bild20 Bild21

so in etwa
wink_new.gif


ich poste euch mal mein Script was ich habe


PHP:
<?php

error_reporting(E_ALL);
function bilderlesen($sourcefolder)
{
$handle = opendir($sourcefolder);   // Ordner 'bilder' wird geöffnet
   while ($file=readdir($handle))
         {
            if ( $file != "." && $file != ".." )
                   {
              $bild[] = $file;
                 }
   }
         $bild_summe = count($bild); // Anzahl der Bilder wird gezählt
         
         for ($b=0; $b<$bild_summe; $b++)
         {
            if ($bild[$b] != '')
            {
               $bilder = $bild[$b]; // Dateiname wird in $Bilder gespeichert
               
               echo $bilder.'<br />';
               
               
               echo '<img src="'.$sourcefolder.$bilder.'" width="150" height="75"><br />';
            }
            else
            {
               $bilder = '';
            }
         }
                
closedir($handle);

}
bilderlesen('bilder/');
?>
Bin in Php Selber sehr neu habe aber erfahrungen in anderen Programmier sprachen.
Hoffe ihr könnt mir weiterhelfen.

Gruß und danke ich vorraus
Mirkoku
 
Eine Frage dazu: heißen die Bilder wirklich so, wie in dem Beispiel, oder heißen sie vielleicht doch Bild0001, Bild0002, Bild0011?

Gruß thuemmy
 
Ok, es ging mir bei der Frage darum, ob Du die Bilder dann noch numerisch sortiert haben willst, eben so:
Bild1, Bild2, Bild3, Bild11, Bild12....
Den logischen Ablauf (alphanumerisch sortiert) würde ich so machen:
Code:
opendir // Verzeichniss öffnen
Schleife {
   readdir
   prüfen ob es sich um eine Datei handelt
   Dateiname in Array speichern
} Schlefenende
closedir
Array sortieren  (sort) // Du kannst nicht davon ausgehen, dass die Dateinamen in sortiererter Reihenfolge vorliegen
foreach($array as $name) {
   Bild ($name) ausgeben
} Schleifenende

Gruß thuemmy
 
jo so ähnlich hab ich mir das auch schon gedacht, ich wer mal was bauen und es dan reinposten wens nicht klappen sollte ;)
 
hab noch eine frage, werden dan die bilder nicht auch wieder einfach links nach unten ausgegeben? Weil das die bilder ausgegeben werden stimmt ja soweit nur ich möchte die Bilder wie in einer tabelle anordnene
 
Dann must Du bei der Ausgabe einen Zähler mitlaufen lassen, und nach x Bildern einen Zeilenumbruch einfügen und den Zähler wieder initialisieren.

Gruß thuemmy
 
alles kalro setzt mich mal dran glaub so in 30 mins sollte mein erste code soweit stehen ;) kannst ja dan nochmal drüber schaun
 
so hab mal angefangen komme jetzt nur leider nicht weiter
PHP:
<?php

function bildholen($sourcefolder)
{
  $geoeffnet = opendir ($sourcefolder);
    while ($dasbild = readdir ($geoeffnet))
      {
        if ($dasbild == ".jpg")     
        
        {
          $bilder[] = $dasbild;        
        } 
    }
     closedir ($geoeffnet);
    sort ($bilder [])
    
   
}
bildholen('bilder/');

?>
meine frage ist wie setzte ich das
foreach($array as $name) {
Bild ($name) ausgeben
} Schleifenende
um?
 
hab ne lösung gefunden =)
PHP:
<table border="0" cellspacing="2" cellpadding="2">
  <tr>
<?php    

function bilderholen($sourcefolder)
{
        $handle = opendir($sourcefolder);
     while(false!==($file = readdir($handle)))
        {
        if ($file != "." && $file != ".." && $file != "upload.php") { 
       echo "
  <td><img width=\"200\" border=\"0\" src=\"".$sourcefolder.$file."\"></td>";$i++;
}
     
     if ($i % 5 == 0) {
          echo "</tr><tr>";
     } 
} 
echo "</tr></table>";

        closedir($handle);
}
bilderholen('bilder/')
?>

so hab ichs jetzt gelöst
 
Ne, das kann es nicht sein.
1. Wenn Du 100 Bilder im Verzeichniss hast, dann hast Du eine Tabelle mit 100 Spalten.
2. Wenn Du im Verzeichniss Bilder ein Unterverzeichniss hast, dann wird das auch angezeigt.
3. Wenn Du im Verzeichniss noch Dateien hast, die nicht upload.php heißen und trotzdem keine Bilder sind, dann werden die auch als Bild eingefügt. Das ist mir passiert, als ich einen kompletten Bilderordner von einem Windowsrechner per FTP hochhgeladen habe. Windows legt da gerne mal eine thumbs.db (glaub ich, dass die Datei so heißt) an.
4. Skalierst Du die Bilder immer auf eine Breite von 200 Pixel, die Höhe wird dann original übernommen.
5. Du solltest die Bilder nicht in Originalgröße in den Browser laden und dann den Browser die Arbeit des skalierens übernehmen lassen.
6. Tabellen in HTML sind nicht dazu gedacht um ein Layout hinzubekommen.

Die Funktion bilderholen() aus Posting 10 gefällt mir schon ganz gut. Das einziege Manko ist abprüfen ob es eine gültige Datei ist und 2. die fehlende Rückgabe des Arrays.

Lösung:
Code:
<?php

function bildholen($sourcefolder)
{
  $geoeffnet = opendir ($sourcefolder);
    while ($dasbild = readdir ($geoeffnet))
      {
        if (is_file($dasbild) && substr($dasbild, -4) == ".jpg"))
        
        {
          $bilder[] = $dasbild;        
        }
    }
    closedir ($geoeffnet);
    sort ($bilder []);
    return ($bilder);
}
und dann wird die Funktion bildholen() so aufgerufen:
Code:
$array = bildholen('bilder/');
Und dann die Anzeige würde so aussehen:
PHP:
$array = bildholen("bilde/"); Array mit Bildnamen holen
$bilder_in_reihe = 4;  // Anzahl Bilder in einer Reihe
$i = 0;       
foreach($array as $name) {
   if (++$i > $bilder_in_reihe) {
      echo "<br>\n";
      $i = 0;
   }
   echo "<img src=\"".$sourcefolder.$name."\">\n";
}
Das Script habe ich mal eben so geschrieben, ohne zu testen, da ich zur Zeit an einem PC mit sehr eingeschränkten Möglichkeiten sitze. Bei der Bildgröße bin ich jetzt davon ausgegangen, dass sie im Thumbnail-Format vorliegen.

Gruß thuemmy
 
hi thuemmy klingt plausiebel was du sagt hab erstmal das script mal übernimmen und es mal getestet, er sagt mir jetzt


Parse error: syntax error, unexpected T_STRING, expecting '(' in C:\xampp\htdocs\test\Bilderholen.php on line 91

also das is der zeile

PHP:
$array = bildholen("bilde/"); Array mit Bildnamen holen

der fehler liegt

PHP:
<?php

function bildholen($sourcefolder)
{
  $geoeffnet = opendir ($sourcefolder);
    while ($dasbild = readdir ($geoeffnet))
      {
        if (is_file($dasbild) && substr($dasbild, -4) == ".jpg")
        
        {
          $bilder[] = $dasbild;        
        }
    }
    closedir ($geoeffnet);
    sort ($bilder []);
    return ($bilder);
}

$array = bildholen("bilde/"); Array mit Bildnamen holen
$bilder_in_reihe = 4;  // Anzahl Bilder in einer Reihe
$i = 0;       
foreach($array as $name) {
   if (++$i > $bilder_in_reihe) {
      echo "<br>\n";
      $i = 0;
   }
   echo "<img src=\"".$sourcefolder.$name."\">\n";
} 

?>

so hab ichs mal reingeholt ums zu testen, nur kan ich mit der fehlermeldung nichts anfangen
 
Ups, kleiner Flüchtigkeitsfehler....

PHP:
$array = bildholen("bilde/"); // Array mit Bildnamen holen
Nach dem Funktionsaufruf ist natürlich ein Kommentar :-D

Gruß thuemmy
 
;) gerade auch gesehen :D,
noch nicht angezeigt, aber 2 neue fehlermeldungen werden geschmissen

Warning: sort() expects parameter 1 to be array, null given in C:\xampp\htdocs\test\Bilderholen.php on line 87

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\test\Bilderholen.php on line 94
 
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\test\Bilderholen.php on line 94

erwartet foreach ein array soweit ich weß
nur ich gebe foreach doch das array mit ?
PHP:
<?php
function bildholen($sourcefolder)
{
  $geoeffnet = opendir ($sourcefolder);
    while ($dasbild = readdir ($geoeffnet))
      {
        if (is_file($dasbild) && substr($dasbild, -4) == ".jpg")
        
        {
          $bilder[] = $dasbild;        
        }
    }
    closedir ($geoeffnet);
    sort ($bilder []);
    return ($bilder[]);
}

$bilder = bildholen('bilder/'); //Array mit Bildnamen holen
$bilder_in_reihe = 5;  // Anzahl Bilder in einer Reihe
$i = 0;       
foreach($bilder as $name) // hier muss ich das array mitgeben 
{
   if (++$i > $bilder_in_reihe) {
      echo "<br>\n";
      $i = 0;
   }
   
   echo '<img src="'.$sourcefolder.$bilder.' "width="150" height="75" "style="border-style: groove; border-color:black;" >';
   } 
bildholen('bilder/');
?>
 
Die Funktion bildholen() muss geändert werden:
PHP:
    sort ($bilder); // Die eckige Klammer ist zuviel
    return ($bilder);  // hier auch
In der foreach-Schleife den Aufruf der bildholen()-Funktion entfernen, das hat da nüscht zu suchen.

Gruß thuemmy
 
leider immer noch nichts verändert, werd gleich mal nene kollegen drüber gucken lassen und mich dan wieder melden ;) trotzdem bin ich für jede hilfe offen =)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben