[PHP] Eerste foto van een map uitlezen.
Ik ben bezig met de website van onze vriendengroep maar ik wil het fotoalbum-gedeelte zo onderhoudsvrij mogelijk maken. Ik ben al aardig op weg maar ik loop vast op 1 klein, vermoedelijk, simpel ding.
Ik lees met onderstaand script alle mappen in de map 'albums' uit. Vervolgens wil ik eigenlijk alleen maar het 1e bestand (een foto, niet ., .. of Thumbs.db) in een array hebben staan. Deze wil ik gebruiken als een thumbnail.
Ik krijg op dit moment van elke submap alle bestanden.
Mijn vraag is hoe ik alleen het eerste bestand kan uitlezen? Ik heb al verschillende pogingen gewaagd door een counter toe te voegen, met for-lussen gestoeid maar voor alsnog kom ik er niet uit.
Iemand een suggestie?
Mijn code:
<img src="/afb/cnt_hdr_fotoalbums.gif"/>
<div id="cntContainer">
<p>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?
/**
* Album mappen en fotos uitlezen en opslaan in juiste array
**/
$albums = "./albums/";
if($openDir = opendir($albums)){
while(false !== ($albumDir = readdir($openDir))){
if($openAlbumDir = opendir($albums.$albumDir)){
if($albumDir != "." && $albumDir != ".."){
if(is_dir($albums.$albumDir)){
while(false !== ($albumFotos = readdir($openAlbumDir))){
if($albumFotos != "." && $albumFotos != ".." && $albumFotos != "Thumbs.db"){
$albumData[] = array("map"=>$albumDir, "foto"=>$albumFotos);
}
}
} else {
echo "SiteManager kon de fotoalbum submap niet openen.";
}
}
}
}
} else {
echo "SiteManager kon de fotoalbums map niet openen.";
}
$albumCount = count($albumData);
sort($albumData);
/**
* Toon albumnamen en thumbnail
**/
for($x = 0; $x < $albumCount; $x++){
echo $albumData[$x]["map"]."/";
for($fotoCount = 0; $fotoCount < 1; $fotoCount++){
echo $albumData[$x]["foto"]."<br/>";
}
}
?>
/**
* Album mappen en fotos uitlezen en opslaan in juiste array
**/
$albums = "./albums/";
if($openDir = opendir($albums)){
while(false !== ($albumDir = readdir($openDir))){
if($openAlbumDir = opendir($albums.$albumDir)){
if($albumDir != "." && $albumDir != ".."){
if(is_dir($albums.$albumDir)){
while(false !== ($albumFotos = readdir($openAlbumDir))){
if($albumFotos != "." && $albumFotos != ".." && $albumFotos != "Thumbs.db"){
$albumData[] = array("map"=>$albumDir, "foto"=>$albumFotos);
}
}
} else {
echo "SiteManager kon de fotoalbum submap niet openen.";
}
}
}
}
} else {
echo "SiteManager kon de fotoalbums map niet openen.";
}
$albumCount = count($albumData);
sort($albumData);
/**
* Toon albumnamen en thumbnail
**/
for($x = 0; $x < $albumCount; $x++){
echo $albumData[$x]["map"]."/";
for($fotoCount = 0; $fotoCount < 1; $fotoCount++){
echo $albumData[$x]["foto"]."<br/>";
}
}
?>
</p>
</div>
sloop de while eruit denk ik, of vraag gewoon de eerste op:
Als ik die while er uit haal lees ik die map niet meer uit. En krijg ik helemaal geen resultaten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
//speel hier eens mee, mooi is het niet maar het werkt waarschijnlijk
if(is_dir($albums.$albumDir)){
$q=0; // iest op nu zetten
while(false !== ($albumFotos = readdir($openAlbumDir))){
if($albumFotos != "." && $albumFotos != ".." && $albumFotos != "Thumbs.db" || $q>=1){ //controleren of hij niet de 1 al gepasseerd is
$albumData[] = array("map"=>$albumDir, "foto"=>$albumFotos);
$q++; // de eerste keer er 1 van maken
}
}
?>
//speel hier eens mee, mooi is het niet maar het werkt waarschijnlijk
if(is_dir($albums.$albumDir)){
$q=0; // iest op nu zetten
while(false !== ($albumFotos = readdir($openAlbumDir))){
if($albumFotos != "." && $albumFotos != ".." && $albumFotos != "Thumbs.db" || $q>=1){ //controleren of hij niet de 1 al gepasseerd is
$albumData[] = array("map"=>$albumDir, "foto"=>$albumFotos);
$q++; // de eerste keer er 1 van maken
}
}
?>
edit typo
Gewijzigd op 01/01/1970 01:00:00 door bart van der veen
Bedankt voor je suggestie maar ook dit mag niet baten. Het script negeert $q volkomen. Geen verschil of ik $q>=1 of bijvb $q>=5 invoer.
en gewoon de eerste opvragen, een array maken is niet zo heel bijzonder voor php