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.
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.
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?
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:
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? :)
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.
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:
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
Ä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.