Home » Php » php – Select random file from directory

php – Select random file from directory

Posted by: admin April 23, 2020 Leave a comment


I’m trying to make a site where users can submit photos, and then randomly view others photos one by one on another page. I have a directory called “uploads” where the pictures are submitted. I’m having trouble reading the pictures from the file. I just want to randomly select a picture from the directory uploads and have it displayed on the page. Any suggestions appreciated.

How to&Answers:

You can use glob to get all files in a directory, and then take a random element from that array. A function like this would do it for you:

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


I’ve turned it a little to get more than one random file from a directory using array.


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"); 


You can also use loop to get values.


Or you can use opendir() instead of glob() because it’s faster


This single line of code displays one random image from the target directory.

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

Target directory: /images/

Image prefix: image_

Number of images in directory: 127



  • images must be named sequentially (eg image_1.png, image_2.png, image_3.png, etc).

  • you need to know how many images are in the directory in advance.


Perhaps there’s a simple way to make this work with arbitrary image-names and file-count, so you don’t have to rename or count your files.

Untested ideas:

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

  • shuffle()

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