8768 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

Je suis nouveau ici et en plus de cela, je suis quelque peu noob niveau développement web. Je pense que mon problème est assez simple mais il me manque quelques clés de connaissance en PHP pour trouver une solution de manière autonome.

Je vais essayer de vous exposer mon problème très clairement. Si jamais quelqu'un a une petite solution ou un conseil, ce serait super cool de prendre le temps de me répondre. Smiley smile

Je voudrais afficher 3 images, piochées aléatoirement dans un dossier. À la manière d'un diaporama j'aimerais que les balises <img> se rechargent pour afficher de nouvelles images, et ce à des facteurs temporels différents (toutes les 3 secondes pour l'une, toutes les 8 secondes pour l'autre, etc.)

Il s'agit d'un projet "artistique", pour ceux qui se demandent qui voudrait bien faire un truc pareil. Smiley biggol

Alors j'ai trouvé un bout de PHP qui me permet de piocher une image aléatoirement dans un dossier et de l'afficher à chaque chargement de page. Ce à quoi j'ai ajouté un morceau de javascript pour pouvoir recharger ma div contenant l'image, toutes les 3 secondes (sans avoir besoin d'auto-refresh tout l'html)

Du coup, j'y suis presque et je suis super fier de moi, mais je n'ai qu'une image ! Je crois qu'il me manque pas plus de 2 lignes de PHP pour pouvoir charger deux autres images. Vous savez comment faire ?

Je vous met mon code ici:


<?php

$root = '';
// use if specifying path from root
//$root = $_SERVER['DOCUMENT_ROOT'];

$path = 'images/';
 
function getImagesFromDir($path) {
    $images = array();
    if ( $img_dir = @opendir($path) ) {
        while ( false !== ($img_file = readdir($img_dir)) ) {
            // checks for gif, jpg, png
            if ( preg_match("/(\.gif|\.jpg|\.png)$/", $img_file) ) {
                $images[] = $img_file;
            }
        }
        closedir($img_dir);
    }
    return $images;
}

function getRandomFromArray($ar) {
    mt_srand( (double)microtime() * 10 ); // php 4.2+ not needed
    $num = array_rand($ar);
    return $ar[$num];
}
// Obtain list of images from directory 
$imgList = getImagesFromDir($root . $path);

$img = getRandomFromArray($imgList);

?> 


J'ai ensuite ajouté ça, pour rafraichir ma div toutes les 3 secondes:


<script type="text/javascript">
var auto_refresh = setInterval(
  function ()
  {
    $('#image').load('demo2.php').fadeIn("slow");
  }, 3000); // rafraichis toutes les 10000 millisecondes

</script>


Voilà voilà, si quelqu'un a une petite idée Smiley smile
Modifié par vincentddd (12 Jun 2014 - 15:15)
Pour ta liste d'images il faut que tu la mettes en cache. Si tu parcours le dossier complet pour lister les images toutes les 3 secondes ce n'est vraiment pas optimisé au niveau ressource.

Pour récupérer tes 3 images il suffit de faire 3 appels à ta fonction getRandomFromArray() et de stocker le résultat dans un tableau. Tu peux alors renvoyer ton tableau en l'encodant en JSON lors de ton appel AJAX.