• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Webalbum erstellen mit PHP

byron1778

Hacker
Hallo,

ich möchte mir mit PHP ein Webalbum erstellen. Dabei sollen nur 4 Bilder in jede Zeile.
Leider schaffe ich es aber nicht umzusetzen.
Nur soweit kam ich bis jetzt!
Code:
<html>
<body>
<div>
<?php
$dirname="/srv/www/htdocs/dateien/";
$dh = opendir($dirname);
$file=array(readdir($dh));
print "<tr>";
for($i=0;$i<4;++$i){
print "<td>$file</td>";
}
print "</tr>";
}
closedir($dh);
?>
</div>
</body>
</html>
Kann mir jemand vielleicht bei meinem Problem weiterhelfen?

Danke im vorhinein

Mfg
Byron


Edit vom Mod: Bitte die [ code ] Tags benutzen. (Ich habs mal schnell reingesetzt, bitte zukünftig selber machen)
 

nbkr

Guru
Einfach nur $file auszugeben wird ncihts bringen, Du musst das schon in einen <img> Tag packen. Außerdem solltest Du beim Durchlaufen des Verzeichnisses prüfen ob die aktuelle Datei wirklich eine JPG Datei ist und nicht evtl die vermeintlichen Dateien "." und "..".

Darüber hinaus ist die Schleife verkehrt. Du durchläufst mit der äußeren Schleife jedes Bild. In dieser Schleife hast Du aber ein Schleife die immer von 1 bis 4 geht. Das funktioniert aber nicht, da die innere Schleife immer mit dem selben $file arbeitet.

Bau es so um, dass Du nur die äußere Schleife hast. In der Schleife lässt Du einen Counter mitlaufen und wenn dieser % 4 == 0 ist dann lässt Du einmal </tr><tr> ausgeben.
 
OP
B

byron1778

Hacker
Hallo,

ich habe es nun einmal testweise so umgeändert.

Code:
<html> 
<body> 
<div> 
<?php 
$dirname="/srv/www/htdocs/dateien/"; 
$dh = opendir($dirname); 
$file=array(readdir($dh)); 
print "<tr>"; 
for($i=0;$i<4;++$i){ 
print '<tr>'
print '<td><img src="$file"></td>';
print '</tr>';
} 
closedir($dh); 
?> 
</div> 
</body> 
</html>

Jetzt habe ich nur das Problem, dass er eine leere Grafik ausgibt, sprich eine Umrandung mit einem Kreuz darin!

Weiss jemand vielleicht, wo das Problem jetzt wieder liegt?

Danke für jede Hilfe schon einmal.

Mfg
Byron
 

cero

Guru
Ich denke mal, dass du das Album selbst bauen möchtest. Falls dir aber auch
eine fertige Lösung reichen würde, kannst du ja mal hier schauen:
http://www.linux-club.de/viewtopic.php?t=47457

Ansonsten gibt es dir eventuell einige Anregungen.
 

Zinnwurm

Hacker
Schau mal:
http://de2.php.net/manual/en/function.readdir.php

readdir spuckt dir einfach das nächste File in der Dir als String raus. Folgerichtig ist array() dabei unntöig und der Befehl muss IN die Schleife.

Quick'n'Dirty würde ich das Ganze in etwa so machen...
Code:
<table>
<tr>
<?php
$dirname="/srv/www/htdocs/dateien/"; 

$dir = opendir($dirname);
$counter = 0;
while ( ($filename = readdir($dir)) !== false )
{
    if ( ($filename == ".") || ($filename == "..") ) continue;
    $counter++;
    echo "<td><img src=\"" . $filename . "\" /></td>";
    if ( ($counter % 4 ) == 0 )
    {
        echo "</tr><tr>";
    };
};
closedir($dir);
?>
</tr>
</table>
Und weil wir daraus lernen sollen:
Am Anfang jegen wir den Pfad fest und öffnen die Dir.
Die while wird solange ausgeführt, wie es neue Einträge im Verzeichnis gibt. Den aktuellen Eintrag speichern wir in $filename.
In der Schleife greifen wir zunächst gleich die Unix-typischen Einträge für das aktuelle und übergeordnete Verzeichnis ab. Da fällt mir gerade ein, dass ich nicht weiß, ob readdir() Verzeichnisse überhaupt berücksichtigt. Wenn es sie berücksichtigt, müsste man dafür noch n Test einbauen...
Naja, nebenbei lassen wir noch einen Zähler mitlaufen, der für jeden Eintrag hochzählt (in dem Fall untypisch bei 1 beginnend, ist hier aber praktischer...).
Dann geben wir die Zelle mit dem aktuellen Bild aus.
Zuletzt prüfen wir, ob sich die aktuelle Eintragsnummer ohne Rest durch vier teilen lässt. Tut sie das, sind nämlich wieder vier voll und wir gehen eine Tabellenzeile weiter. ^^
 
OP
B

byron1778

Hacker
Hallo,

Dein Script funktioniert super.

Es gibt nur ein einziges Problem, welches ich nicht ganz verstehe.
Wenn ich ihm angebe, $dirname="/srv/www/htdocs/dateien/";
$dir=opendir($dirname);

-dann kann er es nicht wirklich öffnen und zeigt mir nur 5 leere Photos an, aber sobald ich ihm die index.php Seite in das Verzeichnis mit den Bildern reinlege, zeigt er alle Photos an und leider auch die index.php - Seite als leeres Bild.

Gibt es eine Möglichkeit, das Verzeichnis ausserhalb des Ordners zu öffnen bzw. wenn nicht, dann dass er die index.php - Seite nicht als leeres Photo anzeigt?

Danke vielmals

Mfg
Byron
 

Zinnwurm

Hacker
Jap, der liegt dort:
Code:
    echo "<td><img src=\"" . $filename . "\" /></td>";
sollte besser
Code:
    echo "<td><img src=\"" . $dirname . $filename . "\" /></td>";
sein, wobei man als Pfad dann natürlich den "von außen" angeben müsste (http://localhost/dateien/).
Am besten wäre wie erwähnt zusätzlich noch ne Mimetype-Prüfung oder sowas, damit die Ausgabe nicht fehlerhaft wird.

Wenn du aber sowieso schon was Nicht-Selbstgeschriebenes nimmst, wäre irgendein Photoalbum, das du sicher irgendwo im Netz findest, wohl besser als mein schnell zusammengeschustertes Progrämmchen. ^^
 

Dr. Glastonbury

Advanced Hacker
Ändert zwar nix am Problem - ABER: Bitte das alt-Attribut beim Image-Tag noch einfügen!

Das kann man so einfach nicht stehen lassen!
 
Oben