Hallo PHP Freunde ich freue mich hier zu sein und möchte gleich mal mit einem, zumindest für mich, sehr verwirrenden Problem daher kommen.
Kurz zur grundlegenden Idee:
Ich will auf meiner Gallery Seite den Inhalt automatisieren. Damit ich nicht jedes mal Zeilen über Zeilen neues Markup hinzufügen muss wenn ich neue Bilder hochlade will ich dass ein Skript das automatisch macht.
Die Idee mal kurz in sehr vereinfachtem Pseudocode:
Das ist jetzt mal stark vereinfacht mein Aufbau.
Jetzt gebietet mir mein logischer Verstand, wenn das Skript in dem Ordner, wo es nach den Datein suchen soll, z.B. 7 Datein findet, sollte das Skript auch nur so viele Datein unterm Strich raus geben. Ich bekomme seltsamer Weise 10 Bilder angezeigt obwohl nur 7 in dem Ordner sind. Das bedeutet, die ersten 7 werden mir ganz normal so angezeigt, wie es erwartet wird aber dann wird mir das letzte Bild noch zusätzlich drei mal angezeigt und ich versteh einfach nicht wieso.
Ich habe auch schon mit einem Zähler geprüft ob die foreach Schleife wirklich nur 7 mal durchläuft und ja, sie läuft in der Tat nur 7 mal durch. Um jetzt nochmal ganz sicher zu gehen habe ich auch die Länge des Arrays überprüft, welches in dieser foreach Schleife ausgewertet wird. Ja, es ist tatsächlich nur 7 Elemente lang. Also intern scheint alles zu stimmen, nur am Frontend kommt was anderes raus. Wenn doch aber ganz offensichtlich nur 7 Datein gefunden werden und somit die Schleife auch nur 7 mal ausgeführt wird, warum bekomme ich dann 7+3 Bilder?
Ich lüfte jetzt mal das Geheimnis, hier ist das gesamte Skript:
Das Verhalten dieses Skriptes könnt ihr unter www.coulrophobia.de/gallery.php bestaunen.
Kurz zur grundlegenden Idee:
Ich will auf meiner Gallery Seite den Inhalt automatisieren. Damit ich nicht jedes mal Zeilen über Zeilen neues Markup hinzufügen muss wenn ich neue Bilder hochlade will ich dass ein Skript das automatisch macht.
Die Idee mal kurz in sehr vereinfachtem Pseudocode:
Code:
Suche in Ordner XY; Für jeden gefunden Ordner: Nimm den Namen des Ordner als Überschrift; Suche in diesem Ordner; Für jede gefundene Datei: Suche im Ordner thumbs nach dem passenden Thumbnail; Erstelle ein <a> Tag mit diesem Thumbnail das zu dem Originalbild verlinkt;
Jetzt gebietet mir mein logischer Verstand, wenn das Skript in dem Ordner, wo es nach den Datein suchen soll, z.B. 7 Datein findet, sollte das Skript auch nur so viele Datein unterm Strich raus geben. Ich bekomme seltsamer Weise 10 Bilder angezeigt obwohl nur 7 in dem Ordner sind. Das bedeutet, die ersten 7 werden mir ganz normal so angezeigt, wie es erwartet wird aber dann wird mir das letzte Bild noch zusätzlich drei mal angezeigt und ich versteh einfach nicht wieso.
Ich habe auch schon mit einem Zähler geprüft ob die foreach Schleife wirklich nur 7 mal durchläuft und ja, sie läuft in der Tat nur 7 mal durch. Um jetzt nochmal ganz sicher zu gehen habe ich auch die Länge des Arrays überprüft, welches in dieser foreach Schleife ausgewertet wird. Ja, es ist tatsächlich nur 7 Elemente lang. Also intern scheint alles zu stimmen, nur am Frontend kommt was anderes raus. Wenn doch aber ganz offensichtlich nur 7 Datein gefunden werden und somit die Schleife auch nur 7 mal ausgeführt wird, warum bekomme ich dann 7+3 Bilder?
Ich lüfte jetzt mal das Geheimnis, hier ist das gesamte Skript:
PHP-Code:
<?php
// local variables
$class_gallery = '"gallery"';
$class_sepTitle = '"sepTitle"';
$class_sepLine = '"sepLine"';
$class_fancybox = '"fancybox"';
$test = 0;
$searchRoot = "images/galleryPics/"; // = images/galleryPics/
// glob() returns an array with the content of the searched directory
$dirs = glob($searchRoot . "*"); // array = [images/galleryPics/directoryname1, images/galleryPics/directoryname2, ...]
// foreach-loop to iterate through the elements of $dirs
foreach($dirs as $dir)
{
$dirName = str_replace($searchRoot, "", $dir);
$dirName_out = '"' . $dirName . '"';
echo("\t<div class=" . $class_gallery . ">\n");
echo("\t\t\t\t<h1 class" . $class_sepTitle . ">" . $dirName . "</h1>\n");
echo("\t\t\t\t<div class=" . $class_sepLine . "></div>\n");
$searchDeeper = $dir . "/"; // = images/galleryPics/directoryname/
// glob() returns an array with the content of the searched directory
$pics = glob($searchDeeper . "*" . ".jpg"); // array = [images/galleryPics/directoryname/filename1.xyz, images/galleryPics/directoryname/filename2.xyz, ...]
// foreach-loop to iterate though the elements of $pics
foreach($pics as $pic)
{
if(is_file($pic))
{
$pic_out = '"' . $pic . '"';
$fileName = str_replace($searchDeeper, "", $pic); // removes $searchDeeper from $pic -> filename.xyz
$picName = str_replace(".jpg", "", $fileName); // removes .jpg from $fileName -> filename
$picName_out = '"' . str_replace("_", " ", $picName) . '"';
$thumb_out = '"' . $searchDeeper . "thumbs/" . $picName . "_thumb.jpg" . '"';
echo("\t\t\t\t<a class=" . $class_fancybox . " href=" . $pic_out . " rel=". $dirName_out . " title=" . $picName_out . "><img src=" . $thumb_out . "</a>\n");
$test++;
}
}
echo("\t\t\t</div>\n\n");
echo($test);
}
?>
Kommentar