Avatar billede brinck10 Nybegynder
01. marts 2007 - 16:34 Der er 10 kommentarer og
1 løsning

Til jakobdo

Hej igen, jakobdo.

Nu var jeg vist lidt for hurtig til at sige at det virkede ;). Det virker fint på den måde du gav mig det, men nu er det sådan at den skal i nogle tilfælæde tælle mapper og ikke jpeg filer :)
Hvordan gør jeg det?
/Frederik
Avatar billede jakobdo Ekspert
01. marts 2007 - 19:40 #1
Jeg må nok prøve at se koden eller et link til tråden med koden, så jeg kan blive genopfrisket med problemet.
Avatar billede brinck10 Nybegynder
01. marts 2007 - 20:12 #2
Vores gamle tråd: http://www.eksperten.dk/spm/765148

Mit problem er at jeg gerne vil have php til at generer en tilfældig sti til nogle billeder som ser sådan her ud(stien): gallery/content/tilfældig-mappe/tilfældig-undermappe/billedet.jpg. Jeg har forsøgt mig frem og tilbage men det virker ikke som jeg vil have det!

Min kode:

function getRandomPath($pathStart){
        $path = $pathStart;
        $odir = opendir($pathStart);
        $cdir = glob($path);
        $r = rand(0, count($cdir));
        $whilei = 0;
        while(false !== ($rdir = readdir($odir))){
        if($rdir != "." && $rdir != ".."){
            $rdir = str_replace(" ", "%20", $rdir);
            if($whilei == $r){
                $path = $path . $rdir ."/";
            }else{
                $whilei++;
            }
        }
        }
        closedir($odir);
        $odir = opendir($path);
        $cdir = glob($path);
        $r = rand(0, count($cdir));
        $whilei = 0;
        while(false !== ($rdir = readdir($odir))){
        if($rdir != "." && $rdir != ".."){
            $rdir = str_replace(" ", "%20", $rdir);
            if($whilei == $r){
                $path = $path . $rdir ."/";
            }else{
                $whilei++;
            }
        }
        }
        closedir($odir);
        $odir = opendir($path);
        $cdir = glob($path);
        $r = rand(0, count($cdir));
        $whilei = 0;
        while(false !== ($rdir = readdir($odir))){
        if($rdir != "." && $rdir != ".."){
            $rdir = str_replace(" ", "%20", $rdir);
            if($whilei == $r){
                $path = $path . $rdir;
            }else{
                $whilei++;
            }
        }
        }
        closedir($odir);
        echo $path;
        }
getRandomPath("gallery/content/");
Avatar billede jakobdo Ekspert
01. marts 2007 - 20:47 #3
Prøv at brug følgende:

function listdirs($dir) {
  static $alldirs = array();
  $dirs = glob($dir . '/*', GLOB_ONLYDIR);
  if (count($dirs) > 0) {
      foreach ($dirs as $d) $alldirs[] = $d;
  }
  foreach ($dirs as $dir) listdirs($dir);
  return $alldirs;
}

$myDirs = listdirs("gallery/content/");
$dir_count = count($myDirs);
$random = rand(0,$dir_count-1);
echo $myDirs[$random];
Avatar billede brinck10 Nybegynder
02. marts 2007 - 15:41 #4
Tak jakobdo. Men, det virker stadig ikke helt. Har trykket opdater et par gange og nogle gange viser den kun 3 stier (gallery/content/sport) fx. og ikke (gallery/content/sport/kite surfing)
Hvordan kan det være?

Hvis jeg også skal finde en et tilfældigt billede til slut i stien, skal jeg så lave endnu en glob? Hvad gør static?
Lidt mange spørgsmål, men de var nødvendige! Ellers tak for hjælpen så langt!
/Frederik
Avatar billede brinck10 Nybegynder
02. marts 2007 - 15:43 #5
Foresten. Der kommer også to skråstreger.
Avatar billede brinck10 Nybegynder
02. marts 2007 - 17:19 #6
Så. Nu er jeg nået frem til dette resultat som virker fint, bortset fra et par gange hvor den returnere ingenting. Hvorfor gør den det, og hvordan kan det rettes?
Min nuværende kode:

<?
function listdirs($dir) {
  static $alldirs = array();
  $dirs = glob($dir . '/*', GLOB_ONLYDIR);
  if (count($dirs) > 0) {
      foreach ($dirs as $d) $alldirs[] = $d;
  }
  foreach ($dirs as $dir) listdirs($dir);
  return $alldirs;
}

$myDirs = listdirs("gallery/content");
$dir_count = count($myDirs);
$dir_random = rand(0,$dir_count-1);
$dir = $myDirs[$dir_random];
$pics = glob($dir . "/{*.jpg,*.JPG}", GLOB_BRACE);
$pics_count = count($pics);
$pics_random = rand(0,$pics_count-1);
echo str_replace("tn_", "", $pics[$pics_random]); // Returnere stringen, men sørger for at det ikke indeholder tn_ (gør alle thumbnails)

Men hvordan kunne jeg sørge for den ikke returnere en hvid streng?
/Frederik

?>
Avatar billede jakobdo Ekspert
02. marts 2007 - 18:33 #7
Hvis den returnerer ingenting, kan det være min rand() funktion er forkert.
Prøv at test lidt.
Prøv f.eks. at udskriv: $myDirs

echo '<pre>';
print_r($myDirs);
echo '</pre>';
Avatar billede brinck10 Nybegynder
04. marts 2007 - 12:11 #8
:S Kan ikke finde fejlen. Nu har jeg også gjort det med det andet array for billederne, og når der ikke kommer noget er det tomt. Jeg har lagt den ud på: www.sjfoto.dk/Untitled-2.php

Min kode ser nu sådan ud:

function listdirs($dir) {
  static $alldirs = array();
  $dirs = glob($dir . '/*', GLOB_ONLYDIR);
  if (count($dirs) > 0) {
      foreach ($dirs as $d) $alldirs[] = $d;
  }
  foreach ($dirs as $dir) listdirs($dir);
  return $alldirs;
}

$myDirs = listdirs("gallery/content");
$dir_count = count($myDirs);
$dir_random = rand(0,$dir_count-1);
$dir = $myDirs[$dir_random];
$pics = glob($dir . "/{*.jpg,*.JPG}", GLOB_BRACE);
$pics_count = count($pics);
$pics_random = rand(0,$pics_count-1);
echo "<pre>";
print_r($myDirs);
echo "<br>";
print_r($pics);
echo "</pre>";
echo str_replace("tn_", "", $pics[$pics_random]);
Avatar billede brinck10 Nybegynder
04. marts 2007 - 13:43 #9
Smid et svar og pointene er dine. Har fundet ud af det ;) Tusind tak!
Avatar billede jakobdo Ekspert
04. marts 2007 - 15:58 #10
Svar!
Avatar billede jakobdo Ekspert
06. marts 2007 - 19:15 #11
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester