webForumDet fria alternativet

lista alla bilder i en katalog

PHP

13 svar · 372 visningar · startad av Rickard

Medlem sedan maj 2001287 inlägg
Frågan#1

Hallojj...

Jag sitter å försöker sparka ihop ett script som skall lista samtliga *.gif , *.jpg , *.bmp i en viss katalog, alla övriga filer skall filtreras bort i listningen.
Meningen är att varje bild skall bli en klickbar länk så bilden öppnas i nytt fönster, men någonting är fel.
Kan någon titta på vad det är för fel med detta, å även berätta hur jag skall filtrera bort allt som inte är .gif , .jpg och .bmp?

<?
$kh=opendir("/var/www/photo");
while($fil=readdir($kh)) {
       if(!($fil=="."||$fil==".."||)) {
       echo "<a href="\['$fil']"\>$fil</a>";
       }
}
closedir($kh);
?>

/Rickard

Medlem sedan juli 2002630 inlägg
#2

Re: lista alla bilder i en katalog

<?
$kh=opendir("/var/www/photo");
while($fil=readdir($kh)) {
       if(!($fil=="."||$fil==".."||)) {
       echo "<a href="\['$fil']"\>$fil</a>";
       }
}
closedir($kh);
?>

Det du ska göra är t.ex att använda funktionen substr() och titta på de 3-4 sista bokstäverna och se vad de "är".
detta gör du whileloopen för varje fil. Hade jag haft mer tid hade jag skrivit koden åt dig men nu får du helt enkelt lära dig hur du gör :)

Om du inte klurat ut det till kl 19 alt ingen gett dig ett bättre svar så ska jag ta en titt till på problemet.
Nu ska jag återgå till arbetet igen :)

Medlem sedan juli 2002630 inlägg
#3

Re: lista alla bilder i en katalog

<?
$kh=opendir("/var/www/photo");
while($fil=readdir($kh)) {
       if(!($fil=="."||$fil==".."||)) {
       echo "<a href="\['$fil']"\>$fil</a>";
       }
}
closedir($kh);
?>

Det du ska göra är t.ex att använda funktionen substr() och titta på de 3-4 sista bokstäverna och se vad de "är".
detta gör du whileloopen för varje fil. Hade jag haft mer tid hade jag skrivit koden åt dig men nu får du helt enkelt lära dig hur du gör :)

Om du inte klurat ut det till kl 19 alt ingen gett dig ett bättre svar så ska jag ta en titt till på problemet.
Nu ska jag återgå till arbetet igen :)

Medlem sedan maj 2001287 inlägg
#4

heh, då får jag nog vänta på att du har tid..
Jag är ganska grön när det gäller PHP, så hur jag använder substr() har jag inte en aning om... =)

Medlem sedan juli 20023 617 inlägg
#5
$dir = "galleri/";

//Skapa en vektor med tillåtna filtilläg
$endings = array('.jpg','.bmp','.gif');
 
$dh = opendir($dir);

while ( $filename = readdir($dh) ) {
  foreach ( $endings as $ending ) {
    if ( eregi($ending,$filename) )
      $images[] = $filename;
  }
}

Har använt ovanstående för att lägga filnamnen i en array. Byt ut "$images[] = $filename" mot någon lämplig echo-sats så borde det fungera.

Medlem sedan maj 2001287 inlägg
#6

Tackar.. det där funkade perfekt.. =)

Nu har jag bara en sista lilla fråga som jag kom på i efterhand.
Scriptet jag laddar upp bilderna med, sparar bilderna med ett nummer och sedan filnamnet.. varför vet jag inte (Jag har inte skrivit det själv utan hittat det på en scriptsajt med gratis script).
Går det på något sätt att solla bort samtliga siffror som kan finnas med i filnamnet?
Det är inte så där jätte snyggt att ha en lista med bilder där alla bilder börjar med slumpade 8 siffror och sedan filnamnet. =)

Red:

Bästa vore nog i sånna fall att ta bort samtliga sifforo i filnamnet, eftersom uppladdningsscriptet troligen förr eller senare kommer att lägga till / ta bort några sifror i början.
Att då övriga siffror (ex. bild2.jpg) där 2:an i den filnamnet försvinner spelar ingen större roll.. =)

Medlem sedan juli 2002630 inlägg
#7

Siffrorna finns sannolikt där för att skapa unika filnamn så att du inte skriver över filer av misstag.

Medlem sedan maj 2001287 inlägg
#8

Jo, det var just vad jag också tror.
Jag jag vill åstakomma nu, är att när filerna listas med scriptet ovan, så skall siffrorna sållas bort...
Så om en av filerna tex heter 7123576bild1.jpg så skall det stå bild1 (eller möjligen bara bild.jpg) när jag listar dom med scriptet.

Frågan är bara hur jag åstakommer det..

Medlem sedan juli 2002630 inlägg
#9

Någonstans i skriptet skapas filnamnet. Det bör se ut typ såhär:

$new_filename = $random_number . $_FILES['whatever']['name']:

Spana i PHPs manual om filuppladdning så kanske det klarnar. Annars är det bara att posta koden här så får vi felsöka :)

Medlem sedan maj 2001287 inlägg
#10

Varför göra det krångligt och leta igenom uppladdningsscriptet (som är på c:a 450 filer sammanlaggt, det är ett helt system typ).

Det enda jag vill, är att dem kod jag använder som visas här ovan, skall sålla bort samtliga siffror ifrån filnamnen när dom listas.
Altså, filnamnen skall lämmnas intakta men listningen visar inga nummer.

ex.

echo "<a href=\"987265bild1.jpg\">bild.jpg</a>";

Givetvis är 987265bild1.jpg egentligen variabeln $filename enligt ovan, men bara för att förklara ytterligare vad jag menar (För jag är osäker på om jag verkligen gjort mig förstådd.) =)
Meningen är altså atyt den listar filnamnet, men det som visas på sidan är helt enkelt utan alla siffror.

Medlem sedan juli 2002630 inlägg
#11

Reguljära uttryck är inte min starka sida men detta bör fungera jättebäst :)

// Alla siffror
$pattern = "[0-9]";

// Ska ersättas med... nada
$replacement = "";

// Reguljärt uttryck
$filename_without_digits = preg_replace($pattern, $replacement, $filename);
Medlem sedan apr. 2002830 inlägg
#12

sabbacus kod funkar säker, men om du vet att det är de 8 första tecknet som är siffror, varför inte bara ta bort dem genom att köra

substr($bildVariabel, 8);

// Nippe

Medlem sedan maj 2001287 inlägg
#13

Tyvärr fick jag ingen av dem att funka.

Sabbacus kod fick förljande fel (flera ggr).

Warning: Empty regular expression in /var/www/jkdsweden/jkdsweden.com/phpscripts/flexphpicen/en/photo/netscape.php on line 19

Line 19 är följande:

$filename_without_digits = preg_replace($pattern, $replacement, $filename);

Dessutom listade den då ALLT i katalogen 3 ggr om.. även "." och "..", samt phpscriptet själv.
nkrantz: Din kod fick inga felmeddelanden, men dock liksom sabbacus kod, listade den allt i katalogen 3 ggr om.

Det kan mycket väl vara för att jag inte vet vart i koden jag skall placera er kod, jag placerade den på raden innan echo satsen.

Medlem sedan juli 20023 617 inlägg
#14

Prova med

{
Den nya koden
echo satsen
}

Alltså ett par {}.

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)