Sinon pour ceux qui veulent optimiser le code du premier message, on a tout intérêt à utiliser la fonction glob de php. Avec glob pas besoin de "opendir", ni autre "readdir" et "closedir". En plus glob possède un système de masque qui remplacera avantageusement le preg_match. Par ailleurs le résultat retourné est directement un tableau il suffira donc de faire simplement un array_rand
soit si l'on veut sélectionner au hasard une image de type jpg, jpeg, gif ou png dans le répertoire 'PHOTO' :
$dossier = 'PHOTO';
$dossier_images = $dossier.'/*.{jpg,jpeg,gif,png}';
$tab_dossier = glob($dossier_images,GLOB_BRACE);
$img_aleatoire = $tab_dossier[array_rand($tab_dossier)];
echo $img_aleatoire;
C'est plus simple, non ? Reste plus ensuite qu'à redimensionner si besoin.et donc au total :
$dossier = 'PHOTO';
$dossier_images = $dossier.'/*.{jpg,jpeg,gif,png}';
$tab_dossier = glob($dossier_images,GLOB_BRACE);
$img_aleatoire = $tab_dossier[array_rand($tab_dossier)];
$max_width = 100;//maximum largeur acceptable
$max_height = 100;//maximum hauteur acceptable
list($width, $height) = getimagesize($img_aleatoire);
$ratioh = $max_height/$height;
$ratiow = $max_width/$width;
$ratio = min($ratioh, $ratiow);
$ratio = $ratio <= 1 ? $ratio : 1;// uniquement si l'on ne veut pas agrandir les photos de plus petites dimensions que $max_width ou $max_height
$width = intval($ratio*$width);
$height = intval($ratio*$height);
echo '<img src="'.$img_aleatoire.'" width="'.$width.'" height="'.$height.'" alt="image" />';