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.
Réponses
Trop de publicités?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];
}
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.
Ou vous pouvez utiliser opendir() au lieu de glob() parce que c'est plus rapide.
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()
conrand(1,scanDir.length)