A bolapié se me ocurren dos formas de hacerlo, una fea y otra más óptima:
a) Sin base de datos
Creas una función con un bucle que te saque un listado de todos los ficheros que hay, si el elemento es una imagen, guardas la ruta en un array, si es un directorio... vuelves a llamar a la misma función. Así hasta que acabe. Luego ordenas el array aleatoriamente y pillas el primero.
Esta opción puede llegar a ser muy lenta según la cantidad de ficheros y subdirectorios que tengas, además del consumo del procesador.
b) Con base de datos
Igual que la primera opción, pero cuando vayas encontrando las imágenes, metes la ruta en una tabla de la base de datos que hayas preparado. Luego cada vez que cargues la web, haces una consulta SQL similar a:
SELECT ruta
FROM imagenes
SORT BY RND(id
) LIMIT 1
ninja-edit: Es ORDER BY, no SORT BY
El único cuidado que tienes que tener es que, cuando la base de datos te de la ruta, realmente exista el fichero.
¡Saludoss!