PHP Zufallsbild aus Verzeichnis auslesen

fUnKuCh3n

Erfahrenes Mitglied
Hallo,

ich möchte mit meinem Script ein Bild ( JPG / jpg ) aus einem Verzeichnis auslesen und anschließend auch ausgeben, ich habe zusammen mit nem Kumpel auch schon nen Quellcode gebastelt, doch irgendwie scheint das nicht zu .

Habt ihr evtl. ne Idee wo der Wurm liegen könnte?

PHP:
<?
$i=0;
error_reporting(E_ALL);

$pfad="files/gal001/pics";
$verz=opendir ($pfad);
while ($file=readdir($verz))
{
    if (filetype($pfad.$file)!="dir")
    if($file != "." && $file != "..")
    {
    {
        $i++;
        {
$arry = explode(".",$file); /* $dateinname = bild.jpg z.b. */
}

$arryanzahl = count($arry);

$arryanzahl = $arryanzahl/2;   

$zahlmit = 0;
for($arryanzahl=1; $arryanzahl<=$zahlmit; $arryanzahl++)
{
if($arryanzahl%2 == '0')    
  {
    if($arry[$x] == 'jpg' or $arry[$x] == 'JPG')
      {
        $zahlmit = $zahlmit+1;
        $neuearry[$zahlmit] = $x;
      }
  }

}

$neuearryanzahl = count($neuearry);

$zufall = rand(1, $neuearryanzahl);

$zufall_2 = $zufall-1; // Holt den den datein namen vor der endung wieder f&uuml;r die arry zahl raus

echo "<img src=".$arry[$zufall_2].".".$arry[$zufall].">";




        echo "$file<br>";

    }
  }

}


 


?>
 
Ich frag erstmal nach den grundlegenden Sachen:
Bis wohin geht denn das Script?


Dann, wenn ich das jetzt nicht falsch sehe, ist da komplett der Wurm drin.

PHP:
        { 
$arry = explode(".",$file); /* $dateinname = bild.jpg z.b. */ 
} 

$arryanzahl = count($arry); 
$arryanzahl = $arryanzahl/2;

Wenn ich mir mal das anschaue. Durch das Explode wirst du nen Array mit 2 Elementen haben.
Einmal "bild" und einmal "jpg". Dann wird die Anzahl von den Array genommen (count($arry)) und anschliessen wieder durch 2 geteilt. Also 2/2.
(Vorraussetzung natürlich, die bilder heissen alle "dateiname.endung" und nicht "datei.name.endung")

Nun, dann fehlt mir irgendwo noch ne Klammer,bevor das Rand durchgeführt wird und wenn mich nicht alles täuscht müssten für die Bildausgabe auch noch Headers gesetzt werden,

Ich bräuchte mehr Infos, aber vllt kann dir jemand auch mit den gegebenen Infos helfen

Gruss!
 
also funktionieren tut das Script bis zur Zeile mit:
PHP:
$zahlmit = 0;

ja du hast soweit Recht, alle Bilder heißen x.endung nicht x.x.endung oder sowas.
und das mit dem Header, das weiss ich gerad auch net so genau aber ich checks ma ab.
/edit das mit dem Header muss nur gemacht werden, wenn wir nen Bild generieren und nicht bei nem Echo.
 
Zuletzt bearbeitet:
Ok, wenn es bis dahin funktioniert, schau ich mir mal de Rest an:
PHP:
if($arry[$x] == 'jpg' or $arry[$x] == 'JPG') 
      { 
        $zahlmit = $zahlmit+1; 
        $neuearry[$zahlmit] = $x; 
      }

Theorethisch würde das ganze klappen, praktisch aber njiada.

Du sagst, das $neuearry[$zahlmit] = $x sein soll, aber was ist $x?
Genauso bei der If Abfrage:
WENN ($Arry[$x] gleich "jpg" ist) dann....

THeoretisch richtig, nur auch hier ist $x nicht definiert.
Da $x nirgendwo definiert ist oder inkrementiert wird, steht da nix drin, also Bool = FALSE;
das bedeutet im Umkehrschluss, das das nicht vorhandene Element von $arry gleich "jpg" sein soll. Das ist so, als wenn du 50% von 0 ausrechnen möchtest.

Würde dir jetzt gerne nen Tipp geben, wie man das richten kann, das es funktioniert, aber wie ich oben schon geschrieben hab, kapier ich den Aufbau nicht ganz.

Ich schreib dir das mal im groben aus dem stehgreif, keine Gewähr, das es funktioniert:

PHP:
$pfad="files/gal001/pics"; 
$verz=opendir ($pfad); 
while ($file=readdir($verz)) 
    // prüfen ob $file
    // - ist kein Verzeichnis
    // - ist kein "." oder ".." filesystemhandle
    // - ob .jpg in gross oder kleinschreibung drin vorkommt
    if (filetype($pfad.$file)!="dir" && ($file != "." && $file != "..") && eregi('.jpg', $file) 
          $array_pictures[] = $file; // fügt den Dateinamen ins array, da kriterien erfüllt
closedir($verz);

echo '<img border="0" src="'.(rand(1, count($array_pictures)).'">';

So ungefähr.

Nochmal zu deinem Code:
Das erscheint mir doch etwas wirr und zusammengeschustert. Soll keine Beleidigung sein, aber überlegen muss man proggen immer noch.
Als kleiner Tipp:
Wenn bei mir etwas nicht klappt, debugge ich erstmal jede Zeile durch eine Ausgabe "echo $entsprechendevariable" oder bei arrays mit echo var_dump($dasentsprechendearray)
Dann muss man vergleichen, ob das, was man erreichen will auch wirklich dort drin steht.
Ansonsten, wenn du noch mehr Infos brauchst, kann ich dir im Moment nur Google ans Herz legen. Solche Scripte, die auch besser aufgebaut und dokumentiert sind, als meins, findet man zu Hauf.

Trotzdem, viel Spass und keep tryin!!
Gruss!
 
Zurück