Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Kuvien lukeminen alihakemistoista + kuvan arpominen

Väpä [03.11.2007 15:40:47]

#

Koodi on kaksi osainen ja se etsii kaikki kuvat hakemistosta jossa se on ja alihakemistoista.

(***kuvat_paivitys.php)

Ensiksi skripti luo listan johon on tallennettu html-koodi joka tulostetaan myöhemmin sivulle. Lista tallennetaan tiedostoon satunnainen.txt, joka kannattaa luoda etukäteen ja laittaa chmod arvot kohdalleen. Jokainen kuva tallennetaan omalle rivilleen.

Kuvan URL-osoite voisi olla esimerkiksi /2007/11/03/img_1234.jpg.

(***kuvat_luku.php)

Kuvien html-koodi luetaan tiedostosta ja arvotaan näytettävä kuva...


Koodiin on käytetty keskusteluista löytyneitä koodeja ja vähän omaa sovellusta...

kuvat_paivitys.php

<?php

function haku($polku, $tyypit) {
    $hak = opendir($polku);
    $taulu = array();
    while (($nimi = readdir($hak)) !== false) {
        if ($nimi == "." || $nimi == "..") continue;
        if (is_dir($polku . $nimi)) {
            $taulu = array_merge($taulu, haku($polku . $nimi . "/", $tyypit));
        } elseif (in_array(strtolower(substr($nimi, -4)), $tyypit)) {
            $taulu[] = $polku . $nimi;
        }
    }
    closedir($hak);
    return $taulu;
}

//avataan satunnainen.txt
$tt = fopen("satunnainen.txt", "w");
$kuvat = haku("./", array(".png", ".gif", ".jpg"));
foreach ($kuvat as $kuva) {
    $kuva = substr($kuva, 2);
    fwrite($tt, "<P><img src=\"kuvat/$kuva\" height=150><br>$kuva</P>\n");
}
fclose($tt);



?>

kuvat_luku.php

<?php

//avataan satunnainen.txt
$lista = file("satunnainen.txt", "r");
//arvotaan kuvan rivi
$arpa = array_rand($lista);

?>


<?php
//tulostetaan arvottu kuva
echo "$lista[$arpa]";
?>

satunnainen.txt (esimerkki

<P><img src="kuvat/2006/Elokuu/30. paiva/img_3260.jpg" height=150><br>2006/Elokuu/30. paiva/img_3260.jpg</P>
<P><img src="kuvat/2006/Elokuu/30. paiva/img_3261.jpg" height=150><br>2006/Elokuu/30. paiva/img_3261.jpg</P>
<P><img src="kuvat/2006/Elokuu/30. paiva/img_3262.jpg" height=150><br>2006/Elokuu/30. paiva/img_3262.jpg</P>

Väpä [03.11.2007 15:46:32]

#

Tuossa satunnainen.txt:ssä olisi tarkoitus että yksi rivi alkaisi koodilla <P> ja päättyisi </P>, mutta näköjään se ei mahdu kokonaan siihen.

tsuriga [04.11.2007 00:33:30]

#

globRecursive käyttöön ja sama hoituu näin:

<?php

$images = globRecursive( 'kuvat/', "*.{jpg,gif,png}", GLOB_BRACE );
echo '<img src="' . $images[ array_rand( $images ) ] . '" alt="Random image" />';

?>

Jos haluaa säästää prosessoriaikaa (varsinkin jos tiedostoja on paljon) niin tiedostopolut voi toki tallentaa jonkin sortin tietokantaan, ja generoida uudet listat vain silloin, kun kuvahakemistoon on tehty muutoksia. Tuo tagin tulostus kannattaa sisällyttää koodiin, sillä siinä tulostuu aina samat tietyt merkkijonot - turha kasvattaa tiedoston kokoa toistolla ja samalla hankaloittaa tiedoston käyttöä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta