Avatar billede m_fisker Nybegynder
29. august 2005 - 13:58 Der er 22 kommentarer og
1 løsning

Ramdom Pic. i under-mapper

hey.

Er der nogle der ligge inde med et script til at Ramdom et billede fra flere under-mapper.

må gerne skifte billede dagligt.
Avatar billede coderdk Praktikant
29. august 2005 - 14:47 #1
Hvad med noget i stil med:

    $folders = array(
            'imagefolder1'
            ,'imagefolder2'
        );

    $pics = array();
    foreach ( $folders as $folder )
    {
        $pics = array_merge( $pics, glob( $folder . '/{*.jpg,*.gif}', GLOB_BRACE ) );
    }

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $pics[ mt_rand( 0, count( $pics ) - 1 ) ] . '" alt="Dagens billede">';
Avatar billede jakobdo Ekspert
29. august 2005 - 14:47 #2
Med random kan du risikere samme billede kommer flere gange i træk!
Du kunne evt putte tingene i en database, og så lave nogle udtræk som opdaterede tabellen når du havde brugt et billede.
Og når alle aå var brugt, starter scriptet forfra.
Avatar billede coderdk Praktikant
29. august 2005 - 14:50 #3
jakobdo, hvis du seeder med det samme tal, får du altid de samme "random" værdier ;)
Avatar billede jakobdo Ekspert
29. august 2005 - 14:51 #4
Er vi enige om random 1-10, i teorien kunne jeg godt ramme 5 hver gang?
Også selvom jeg seeder med microsekunder.
Avatar billede coderdk Praktikant
29. august 2005 - 14:53 #5
Han indikerer at han gerne vil have det samme billede hele dagen, men et nyt billede hver dag :) Så hvis man seeder med f.eks. dags dato, så vil du få den samme "random"-værdi hver gang, hele dagen ;)

Prøv at lave et script:

<?php

  mt_srand( date( 'Ymd' ) );
  echo "Random tal: " . mt_rand( 0, 200 );

?>

Og reload det flere gange - Samme tal hver gang ;)
Avatar billede jakobdo Ekspert
29. august 2005 - 14:58 #6
Jaja, nu skal du sgu da ikke spille smart! :o)
Avatar billede m_fisker Nybegynder
29. august 2005 - 14:58 #7
billeder ligger i test/images, der efter i undermapper. hvordan skal jeg kode den sti ind i

$folders = array(
            'imagefolder1'
            ,'imagefolder2'
        );

    $pics = array();
    foreach ( $folders as $folder )
    {
        $pics = array_merge( $pics, glob( $folder . '/{*.jpg,*.gif}', GLOB_BRACE ) );
    }

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $pics[ mt_rand( 0, count( $pics ) - 1 ) ] . '" alt="Dagens billede">';
Avatar billede m_fisker Nybegynder
29. august 2005 - 15:01 #8
underne -mapperne skal script selv finde ud fra test/images
Avatar billede coderdk Praktikant
29. august 2005 - 15:01 #9
jakobdo :-D

m_fiser:

$folders = array(
            'test/images'
            ,'test/images/andenfolder'
            ,'test/images/flerefoldere'
            ,'test/images/mange'
        );

Ellers skal du skrive en dir scanner, det er heller ikke så svært - dette var bare en nem løsning hvis der ikke er så mange :)
Avatar billede coderdk Praktikant
29. august 2005 - 15:02 #10
Argh! Sorry! m_fisker! :) lol typo!
Avatar billede jakobdo Ekspert
29. august 2005 - 15:04 #11
Enten skal du skrive alle mapper med ind i:
$folders = array(
            '/test/images'
            ,'/test/images/ferie'
        );
Osv...
Ellers skal du lave en funktion som finder alle undermapper i en mappe og bygger et array.
Du kan muligvis bruger:
$folders = array();
$folders = array_merge( $folders, glob("/test/images/*', GLOB_ONLYDIR ) );
Avatar billede jakobdo Ekspert
29. august 2005 - 15:05 #12
CoderDK: m_fiser, hvad er det for en måde at tiltale folk på! :o)
Avatar billede m_fisker Nybegynder
29. august 2005 - 15:07 #13
jakobdo:
Jeg har da ikke skrivet noget der kan virke støden..???
mener jeg selv...
Avatar billede jakobdo Ekspert
29. august 2005 - 15:08 #14
m_fisker: Det var ment til CoderDK! ;o)
Avatar billede coderdk Praktikant
29. august 2005 - 15:08 #15
m_fisker, Nej, jakobdo henviser til at jeg kom til at skrive "m_fiser" :) hehehe
Avatar billede m_fisker Nybegynder
29. august 2005 - 15:10 #16
coderdk:
det havde jeg ikke set :)
Avatar billede coderdk Praktikant
29. august 2005 - 15:13 #17
Prøv lige at se om dette ikke virker, det er ikke testet, men skulle da virke:

<?php

    $root_folder = "test/images";
   
    $files = array();
    function scanDir( $folder )
    {
        global $files;
        if ( $dh = opendir( $folder ) )
        {
            while ( $file = readdir( $dh ) )
            {
                if ( is_dir( $file ) && $file != '.' && $file != '..' )
                {
                    scanDir( $folder . '/' . $file );
                }
                elseif ( is_file( $file ) && preg_match( '!\.(jpg|gif)$!i', $file ) )
                {
                    $files[] = $folder . '/' . $file;
                }
            }
        }
    }
   
    scanDir( $root_folder );

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $files[ mt_rand( 0, count( $files ) - 1 ) ] . '" alt="Dagens billede">';

?>
Avatar billede coderdk Praktikant
29. august 2005 - 15:14 #18
Hmm det skal gøres pænere:

<?php

    $root_folder = "test/images";
   
    $files = array();
    function scanDir( $folder )
    {
        global $files;
        if ( $dh = opendir( $folder ) )
        {
            while ( $file = readdir( $dh ) )
            {
                if ( is_dir( $file ) && $file != '.' && $file != '..' )
                {
                    scanDir( $folder . '/' . $file );
                }
                elseif ( is_file( $file ) && preg_match( '!\.(jpg|gif)$!i', $file ) )
                {
                    $files[] = $folder . '/' . $file;
                }
            }
            closedir( $dh );
        }
    }
   
    scanDir( $root_folder );

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $files[ mt_rand( 0, count( $files ) - 1 ) ] . '" alt="Dagens billede">';

?>
Avatar billede m_fisker Nybegynder
29. august 2005 - 15:14 #19
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /***/randompic.php on line 13

echo '<img src="' . $pics[ mt_rand( 0, count( $pics ) - 1 ) ] . '" alt="Dagens billede">';


<?
          $folders = array();
$folders = array_merge( $folders, glob("/test/images/*', GLOB_ONLYDIR ) );
        );

    $pics = array();
    foreach ( $folders as $folder )
    {
        $pics = array_merge( $pics, glob( $folder . '/{*.jpg,*.gif}', GLOB_BRACE ) );
    }

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $pics[ mt_rand( 0, count( $pics ) - 1 ) ] . '" alt="Dagens billede">';
?>
Avatar billede coderdk Praktikant
29. august 2005 - 15:14 #20
Ok, så kan jeg lære det, det bør være:

<?php

    $root_folder = "test/images";
   
    $files = array();
    function scanDir( $folder )
    {
        global $files;
        if ( $dh = opendir( $folder ) )
        {
            while ( $file = readdir( $dh ) )
            {
                if ( is_dir( $folder . '/' . $file ) && $file != '.' && $file != '..' )
                {
                    scanDir( $folder . '/' . $file );
                }
                elseif ( is_file( $folder . '/' . $file ) && preg_match( '!\.(jpg|gif)$!i', $file ) )
                {
                    $files[] = $folder . '/' . $file;
                }
            }
            closedir( $dh );
        }
    }
   
    scanDir( $root_folder );

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $files[ mt_rand( 0, count( $files ) - 1 ) ] . '" alt="Dagens billede">';

?>
Avatar billede coderdk Praktikant
29. august 2005 - 15:17 #21
Jeg kørte det lige igennem min php, og der findes jo allerede en scandir i php5, så:

<?php

    $root_folder = "images";
   
    $files = array();
    function doScanDir( $folder )
    {
        global $files;
        if ( $dh = opendir( $folder ) )
        {
            while ( $file = readdir( $dh ) )
            {
                if ( is_dir( $folder . '/' . $file ) && $file != '.' && $file != '..' )
                {
                    doScanDir( $folder . '/' . $file );
                }
                elseif ( is_file( $folder . '/' . $file ) && preg_match( '!\.(jpg|gif)$!i', $file ) )
                {
                    $files[] = $folder . '/' . $file;
                }
            }
            closedir( $dh );
        }
    }
   
    doScanDir( $root_folder );

    mt_srand( date( 'Ymd' ) );
    echo '<img src="' . $files[ mt_rand( 0, count( $files ) - 1 ) ] . '" alt="Dagens billede">';

?>
Avatar billede coderdk Praktikant
29. august 2005 - 15:18 #22
( ret $root_folder )

:) DAMN jeg spammer lige nu! :P
Avatar billede m_fisker Nybegynder
29. august 2005 - 15:22 #23
det virker.. 1000000 tak
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