webForumDet fria alternativet

Random image (även från subfolders)

7 svar · 512 visningar · startad av Madmartigan

MadmartiganMedlem sedan sep. 200315 inlägg
#1

Jag har ett php-script som visar en slumpvald bild ur en mapp.
Jag skulle behöva att den även kollade igenom underliggande mappar och visar en slumpvald bild från någon av dessa.
Alltså vilken fil som helst som ligger i mappen (eller undermappar till denna).

Vad behöver jag ändra för att det ska fungera?

<?php
//read folder
$folder=opendir("030804/");
while ($file = readdir($folder))
$names[count($names)] = $file;
closedir($folder);
//sort file names in array
sort($names);
//remove any non-images from array
$tempvar=0;
for ($i=0;$names[$i];$i++){
$ext=strtolower(substr($names[$i],-4));
if ($ext==".jpg"){$names1[$tempvar]=$names[$i];$tempvar++;}
}
//random
srand ((double) microtime() * 10000000);
$rand_keys = array_rand ($names1, 2);
//random image from array
$slika=$names1[$rand_keys[0]];
//image dimensions
$dimensions = GetImageSize($slika);
if (isset($pic)){header ("Location: $slika");}
else {echo "<img src=\"030804/$slika\" $dimensions[3]>";}
?>

Tacksam för snabbt svar.

MatteMedlem sedan aug. 20002 975 inlägg
#2

Testa det här:

function get_files($dir) {

   $names = array();

   if (substr($dir, -1) != '/') {
      $dir .= '/';
   }
   
   if ($folder = opendir($dir)) { 

      while (false !== ($file = readdir($folder))) { 

         if ($file != "." && $file != "..") { 

            if (is_dir($dir.$file)) {

               $names = array_merge($names, get_files($dir.$file));            

            } elseif (strtolower(substr($file,-4)) == '.jpg') {

               $names[] = $dir.$file;

            }

         } 

      } 

      closedir($folder); 

   }
   
   return $names;

}

$names = get_files('bilder');

function cmp($a, $b) {
   $a = substr($a, strrpos($a, '/'));
   $b = substr($b, strrpos($b, '/'));
   return ($a > $b) ? 1 : -1;
}

usort($names, 'cmp');

// Här kan du slumpa

Men jag förstår inte varför du ska sortera, när du ändå bara ska använda arrayen att slumpa från.

MadmartiganMedlem sedan sep. 200315 inlägg
#3

Jag behöver inte sortera, det var bara med en sortering i koden jag hade.
Jag testade din kod, men fick det inte att fungera.
Vart ska jag sätta in (definiera) mitt mapnamn?

MatteMedlem sedan aug. 20002 975 inlägg
#4
$names = get_files('030804/');

Ska du inte sortera så kan du ta bort följande rader:

function cmp($a, $b) {
   $a = substr($a, strrpos($a, '/'));
   $b = substr($b, strrpos($b, '/'));
   return ($a > $b) ? 1 : -1;
}

usort($names, 'cmp');
MadmartiganMedlem sedan sep. 200315 inlägg
#5

Ok, jag har testat den nya koden, men får det inte att fungera. Får inte ens en bruten bild. Ska jag använda något av min gamla kod också?
Kan du klistra in hela den koden jag ska ha, vore jag tacksam.

MatteMedlem sedan aug. 20002 975 inlägg
#6

Använd funktionen get_files() så här:

$names = get_files('030804/');

//random 
srand((float) microtime() * 10000000);
$rand_key = array_rand($names); 
//random image from array 
$slika = $names[$rand_key]; 

//image dimensions 
$dimensions = GetImageSize($slika); 

if (isset($pic)) {
   header("Location: $slika");
} 
else {
   echo "<img src=\"$slika\" $dimensions[3]>";
}
CaineMedlem sedan nov. 200413 inlägg
#7

Jag har försöka använda koden på min dia men jag får den inte att fungera, mappen där bilderna ligger har sökvägen eld/eldbild från filen som ska visa dem.

Hoppas någon vänlig själ kan hjälpa mig med detta.

MatteMedlem sedan aug. 20002 975 inlägg
#8

Kan du visa hur den kod du använde ser ut, samt på vilket sätt det blev fel för dig?

251 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
128 ms — hämta forumlista (db)
117 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)