webForumDet fria alternativet

Kolla mapp efter bilder och lista dem

29 svar · 1 929 visningar · startad av silfver

silfverMedlem sedan apr. 200312 679 inlägg
#1

Okej, här kommer en nybörjarfråga som jag hoppas ni kan svara på snällt. :)

Jag har en mapp på servern som heter uploads. I den här mappen skapas en mapp för år och månad när jag laddar upp en bild. (Kan tänka mig ändra på det här ifall det blir problem med mappnivåer.)

När jag laddar upp en bild så skapas där två filer - originalfilen samt en thumbnail som innehåller 150x150 i namnet, t.ex. i-love-hong-kong-150x150.jpg

Kan man nu på ett enkelt sätt kolla den här katalogen efter jpg-bilder som innehåller 150x150 och sedan lista dem? Helst i datumordning.

Är det genomförbart? :) Jag antar att man måste köra någon slags ftp-anslutning eftersom bilderna inte ligger i en databas.

metalboyMedlem sedan jan. 2005953 inlägg
#2

Du skulle kunna loopa igenom mapparna rekursivt och spara filnamnen i en array. Använd t.ex. scandir() eller glob() för att hämta ut innehållet i en mapp.

silfverMedlem sedan apr. 200312 679 inlägg
#3

metalboy skrev:

Du skulle kunna loopa igenom mapparna rekursivt och spara filnamnen i en array. Använd t.ex. scandir() eller glob() för att hämta ut innehållet i en mapp.

Haha, du måste ha missat min inledning. Finns det färdig kod för sånt?

metalboyMedlem sedan jan. 2005953 inlägg
#4

Det finns säkert färdig kod för det, men inte inbyggt i PHP :)

Ligger det endast bilder i mapparna eller kan det ligga andra filer där också?

Edit: Det finns bra exempelkod i manualen också :)
http://www.php.net/scandir
http://www.php.net/glob

silfverMedlem sedan apr. 200312 679 inlägg
#5

metalboy skrev:

Det finns säkert färdig kod för det, men inte inbyggt i PHP :)

Ligger det endast bilder i mapparna eller kan det ligga andra filer där också?

Edit: Det finns bra exempelkod i manualen också :)
http://www.php.net/scandir
http://www.php.net/glob

Förmodligen bara jpg-bilder. :)

Ska kolla dina länkar!

silfverMedlem sedan apr. 200312 679 inlägg
#6

Det är ingen som kan, eller vet, var man kan hitta en färdig sån här kod? Jag själv kan ingenting om sånt här. :l

tydalMedlem sedan juni 20034 013 inlägg
#7

En rekursiv funktion är lämpligt här. En rekursiv funktion är en som anropar sig själv. Vi skapar alltså en funktion som går igenom allt innehåll i en mapp. Hittar den en fil som har 150x150 i namnet så skriver den ut den. Hittar den en mapp så skickar den mappen till sig själv...

Så här:

<?php
function kollaMappen($mapp)
{
  $mappinnehall = scandir($mapp);
  foreach ($mappinnehall as $fil)
  {
    if (is_dir($fil))
      kollaMappen($fil);
    elseif (strpos($fil, "150x150"))
    {
      /* Här har du en träff som du då kan göra vad du vill med. */
      echo($fil . "<br />");
    }
  }
}
?>

För att starta så anropar du den med mappen du vill starta i... exempelvis:

<?php kollaMappen("/var/uploads/"); ?>
silfverMedlem sedan apr. 200312 679 inlägg
#8

tydal skrev:

En rekursiv funktion är lämpligt här. En rekursiv funktion är en som anropar sig själv. Vi skapar alltså en funktion som går igenom allt innehåll i en mapp. Hittar den en fil som har 150x150 i namnet så skriver den ut den. Hittar den en mapp så skickar den mappen till sig själv...

Så här:

<?php
function kollaMappen($mapp)
{
  $mappinnehall = scandir($mapp);
  foreach ($mappinnehall as $fil)
  {
    if (is_dir($fil))
      kollaMappen($fil);
    elseif (strpos($fil, "150x150"))
    {
      /* Här har du en träff som du då kan göra vad du vill med. */
      echo($fil . "<br />");
    }
  }
}
?>

Nice! Om mappen då heter uploads, kan jag skriva så här?

$mapp = uploads/;

Räcker din kod verkligen? Jag trodde man var tvungen att göra nån ftp-anslutning eller nåt i den stilen, fast det kanske inte behövs när koden exekveras på servern? :)

r\ Ah, såg din redigering. :)

silfverMedlem sedan apr. 200312 679 inlägg
#9

tydal: Jag skriver ut min sökväg så här:

kollaMappen("/wordpress/wp-content/uploads/2008/04");

Men det vill sig inte. Antar att jag har fel sökväg, men jag vet inte hur jag ska skriva ut den exakt.

Kan man göra nåt i stil med

($_SERVER["DOCUMENT_ROOT"]."/wordpress/wp-content/uploads/2008/04");

Hoppas du förstår vad jag menar. :)

kollaMappen($_SERVER["DOCUMENT_ROOT"]."/wordpress/wp-content/uploads/2008/04");

Fungerar alltså inte.

silfverMedlem sedan apr. 200312 679 inlägg
#10

Nån som vet hur jag kan få till min sökväg? För just nu hänger sig scriptet. :l

metalboyMedlem sedan jan. 2005953 inlägg
#11

Det blir en evighetsloop eftersom mapparna . och .. ligger med i arrayen och scriptet inte tar hänsyn till det.

Före raden med is_dir() kan du lägga till
if ($fil == '.' || $fil == '..') continue;

Btw, bland användarkommentarerna på manualsidan för scandir() så finns det en funktion som kan tänkas vara användbar för dig.
http://se2.php.net/manual/en/function.scandir.php#82470
Där anger du vilka filändelser som du är intresserad av.

silfverMedlem sedan apr. 200312 679 inlägg
#12

metalboy skrev:

Det blir en evighetsloop eftersom mapparna . och .. ligger med i arrayen och scriptet inte tar hänsyn till det.

Före raden med is_dir() kan du lägga till
if ($fil == '.' || $fil == '..') continue;

Btw, bland användarkommentarerna på manualsidan för scandir() så finns det en funktion som kan tänkas vara användbar för dig.
http://se2.php.net/manual/en/function.scandir.php#82470
Där anger du vilka filändelser som du är intresserad av.

Ja, det fungerade! Men nu skriver den ju bara ut filnamnen, så jag försökte med nåt sånt här:

      echo(<img=\"$fil\" alt=\"\"/> . "<br />");

Men det fungerade ju inget vidare. :)

metalboyMedlem sedan jan. 2005953 inlägg
#13
echo '<img src="' . $fil . '" alt="" /><br />';
silfverMedlem sedan apr. 200312 679 inlägg
#14

Tack! Nu fungerar det kanonbra! :) Tydal och metalboy! :bire

silfverMedlem sedan apr. 200312 679 inlägg
#15

En liten fundering. :)

Skulle det vara krångligt ifall jag ville kunna skriva ut en länk till originalfilen? Nu skriver ju scriptet ut tumnageln. En bild, ingenting mer. Men skulle man även kunna koppla tumnageln till originalbilden, som heter samma sak fast utan 150x150?

Förstår ifall det här är olönt att göra, men jag blev nyfiken! :bire

stevenetMedlem sedan juni 20001 251 inlägg
#16

https://www.php.net/str_replace

$orginalfil = str_replace("150x150", "", $fil);
echo '<a href="' . $orginalfil . '"><img src="' . $fil . '" alt="" /></a><br />';
silfverMedlem sedan apr. 200312 679 inlägg
#17

stevenet skrev:

https://www.php.net/str_replace

$orginalfil = str_replace("150x150", "", $fil);
echo '<a href="' . $orginalfil . '"><img src="' . $fil . '" alt="" /></a><br />';

Wow. Enkelt och snyggt. Jag är riktigt tacksam för ditt svar! :bire

silfverMedlem sedan apr. 200312 679 inlägg
#18

Är det möjligt att få scriptet att sortera bilderna efter datumet som de är uppladdade på servern? :) Så man får någon ordning på bilderna, för nu läggs de hullerombuller.

silfverMedlem sedan apr. 200312 679 inlägg
#19

Inte? :)

metalboyMedlem sedan jan. 2005953 inlägg
#20

Jodå. Titta på usort() och filectime()

130 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)