35 votes

Sélectionner un fichier aléatoire dans le répertoire

J'essaie de créer un site où les utilisateurs peuvent soumettre des photos, puis voir au hasard les autres photos une par une sur une autre page. J'ai un répertoire appelé "uploads" où les photos sont soumises. J'ai des difficultés à lire les photos à partir du fichier. Je veux simplement sélectionner au hasard une photo dans le répertoire "uploads" et l'afficher sur la page. Toute suggestion est la bienvenue.

76voto

alexn Points 25639

Vous pouvez utiliser globe terrestre pour obtenir tous les fichiers d'un répertoire, et ensuite prendre un élément aléatoire dans ce tableau. Une fonction comme celle-ci le ferait pour vous :

function random_pic($dir = 'uploads')
{
    $files = glob($dir . '/*.*');
    $file = array_rand($files);
    return $files[$file];
}

7voto

Je l'ai un peu tourné pour obtenir plus d'un fichier aléatoire d'un répertoire en utilisant un tableau.

<?php

function random_pic($dir)
{
 $files = glob($dir . '/*.jpg');
 $rand_keys = array_rand($files, 3);
 return array($files[$rand_keys[0]], $files[$rand_keys[1]], $files[$rand_keys[2]]);
}

// Calling function

list($file_1,$file_2,$file_3)= random_pic("images"); 

?>

Vous pouvez également utiliser la boucle pour obtenir des valeurs.

0voto

Ou vous pouvez utiliser opendir() au lieu de glob() parce que c'est plus rapide.

0voto

johny why Points 176

Cette simple ligne de code affiche une image aléatoire du répertoire cible.

<img src="/images/image_<?php $random = rand(1,127); echo $random; ?>.png" />

Répertoire cible : /images/

Préfixe de l'image : image_

Nombre d'images dans le répertoire : 127

https://perishablepress.com/drop-dead-easy-random-images-via-php/


Inconvénients

  • Les images doivent être nommées de manière séquentielle (ex. image_1.png , image_2.png , image_3.png etc).

  • vous devez savoir à l'avance combien d'images se trouvent dans le répertoire.


Alternatives

Il existe peut-être un moyen simple de faire fonctionner ce système avec des noms d'images et des nombres de fichiers arbitraires, afin que vous n'ayez pas à renommer ou à compter vos fichiers.

Des idées non testées :

  • <img src=<?php $dir='/images/'; echo $dir . array_rand(glob($dir . '*.jpg')); ?> />

  • shuffle()

  • scanDir() con rand(1,scanDir.length)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X