Avatar billede buxxy Praktikant
11. februar 2009 - 16:35 Der er 10 kommentarer og
1 løsning

Dagens billede - virker ikke mere

Hej Eksperter!

Jeg har tidligere fået hjælp herinde til at få tilrettet et "Dagens billede" - script. Jeg har dog ikke brugt den i noget tid, og har samtidig også skiftet til PHP5. Jeg fandt så også en kode herinde der skulle kunne gøre det i PHP5, men denne viser blot et tilfældigt billede HVER gang siden opdateres - og altså ikke kun en gang i døgnet. Dertil tager den, nogle gange, også billeder der ligger i undermapper - end den egentligt destination den skulle tage fra. Den skulle tage fra /images/ - men tager også fra andre mapper der ligger inde i /images-mappen.

Jeg håber her er en der lige kan gennemskue hvad "fejlen" er.

Her følger koden til scriptet jeg fandt herinde:
------------------------------------------------

    $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' ) );

$dagens_billede = $files[ mt_rand( 0, count( $files ) - 1 ) ];
echo "<a href='". $dagens_billede ."'><img src='". $dagens_billede ."' alt='Dagens billede' border='0' width='120' /></a>";

------------------------------------------------

Mvh.
Buxxy.
Avatar billede erikjacobsen Ekspert
11. februar 2009 - 16:46 #1
Hvis du nu fjerner linien

    doScanDir( $folder . '/' . $file );

fx ved at lave det til en kommentar:

    //doScanDir( $folder . '/' . $file );

hvad sker der så?
Avatar billede jakobdo Ekspert
11. februar 2009 - 16:50 #2
Tag et kig på: http://dk.php.net/glob
Og byg din løsning ala dette:

$images = glob("/images/{*.jpg,*.gif}",GLOB_BRACE);
Avatar billede psychopixi Nybegynder
11. februar 2009 - 17:11 #3
jakobdo har fat i noget af det rigtige. Ud fra hans udgangspunkt har jeg lavet denne:

<?php
mt_srand(date("dmY"));
$images = glob("images/{*.jpg,*.gif,*.png}",GLOB_BRACE);
$number_of_images = count($images);
$chosen_image = mt_rand(0,$number_of_images-1);
echo "<img src=\"$images[$chosen_image]\" alt=\"Dagens billede\"/>";
?>

Jeg har testet at den virker med et tilfældigt antal billeder i mappen "images"...
Avatar billede buxxy Praktikant
11. februar 2009 - 18:02 #4
@erikjacobsen: Det gav desværre ingen forskel - billederne er stadig forskellige for hver gang man opdaterer siden.

@jakobdo: Jeg skal måske lige nævne at jeg er newbee indenfor dette. Har dog læst alt hvad der står på siden du linker til - nedefra og op. Men det er mig blot lidt svært, når jeg ikke ved hvad de forskellige ting gør/betyder/har af funktioner. Hehe, synes det lignede lidt "kinesisk" at kigge på.. Desværre er jeg ikke "så godt med" endnu når vi taler PHP. Men jeg har dog fået afprøvet en masse forskellige "eksempler" - men jeg kommer frem til samme resultat hver gang = billedet skifter HVER gang siden opdaterer. Den må meget gerne nøjes med at skifte en gang i døgnet.

@psychopixi: Se det er straks noget andet - for en newbee som mig. Desværre gør den som alle de andre jeg har afprøvet de sidste par dage = billedet skifter HVER gang siden opdateres.

@Alle 3: Mange tak for foreløbige jeres input.
Avatar billede psychopixi Nybegynder
11. februar 2009 - 18:12 #5
Hvis billedet skifter hver gang har din server sandsynligvis et problem med mt_srand() eller date(), da en kombination af disse kun giver ét seed pr dag, sådan som jeg har kodet det - og jeg har testet det på min egen server; og der skifter den ikke billede mere end én gang om dagen.
Avatar billede buxxy Praktikant
11. februar 2009 - 18:54 #6
Well, jeg tjekkede lige selv på lokal-server, og her virker det helt fint efter hensigten. Så det er dælme rigtig nok server-relateret.

Tjekkede så phpinfo ved Gigahost - og her står der flg.:

suhosin.mt_srand.ignore On

Men om man så kan ændre det via phpini.php eller en .htaccess-fil ja det ved jeg ikke. Har søgt på problemet, men kan ikke finde noget med at ændre dette..
Avatar billede erikjacobsen Ekspert
11. februar 2009 - 19:31 #7
Prøv om du kan bruge http://php.net/rand og srand i stedet. De er fine nok til dit formål.
Avatar billede buxxy Praktikant
11. februar 2009 - 19:43 #8
Så hittede jeg ud af det :)

1. Lavede en .htaccess-fil med flg. indhold - og oploadede til roden af serveren:

AddDefaultCharset ISO-8859-1
suPHP_ConfigPath /www/MIN_SIDE.dk/


2. Lavede en php.ini-fil med flg. indhold - og oploadede den til roden af serveren:

suhosin.mt_srand.ignore = Off;


Jeg siger mange mange tak!

@psychopixi: Hvis du smider et svar - så smider jeg lige nogle point.

@Alle andre: Fortsat god aften!
Avatar billede psychopixi Nybegynder
11. februar 2009 - 19:53 #9
Og et svar:)
Avatar billede buxxy Praktikant
11. februar 2009 - 22:09 #10
Hmm, det var måske nok lidt for hurtigt jeg skrev at det virkede..

Jeg ved ikke om der skal oprettes et nyt spørgsmål, eller om det er ok her ?

Jeg prøver: Har lagt det op på min gl. test-side: www.dvdside.dk og det virker fint, hvis man kun ser "Dagens billede" fra forsiden af.

Bevæger jeg mig f.eks. ind i en debat - ja så forsvinder billedet, samt jeg får flg. fejl-meddelser:

Notice: Undefined offset: 0 in /home/www/dvdside.dk/24hpic.php on line 26

Notice: Undefined offset: 0 in /home/www/dvdside.dk/24hpic.php on line 27

Dette kan ses f.eks. hvis man er her - i stedet for på selve forsiden:

www.dvdside.dk/forum/viewthread.php?forum_id=2&thread_id=5&pid=5#post_5

Er det noget der findes en løsning på - eller er det blot mig der gør noget forkert ? (hehe, den sidste hælder jeg meget til)..
Avatar billede erikjacobsen Ekspert
11. februar 2009 - 22:25 #11
Når du befinder dig i forum-kataloget vil

  $root_folder = "images";

ikke længere pege på folderen eet niveau længere ude.
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