PHP вытащить случайное изображение из папки

Я задаюсь вопросом о «лучшем» способе вытаскивания случайного изображения из папки.

Например, чтобы php просто выбирал случайное изображение из папки вместо поиска и создания массива.

вот как я это делаю сегодня

<?php $extensions = array('jpg','jpeg'); $images_folder_path = ROOT.'/web/files/Header/'; $images = array(); srand((float) microtime() * 10000000); if ($handle = opendir($images_folder_path)) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { $ext = strtolower(substr(strrchr($file, "."), 1)); if(in_array($ext, $extensions)){ $images[] = $file; } } } closedir($handle); } if(!empty($images)){ $header_image = $images[array_rand($images)]; } else { $header_image = ''; } ?> 

Solutions Collecting From Web of "PHP вытащить случайное изображение из папки"

Попробуй это:

 <?php $dir = "images/"; $images = scandir($dir); $i = rand(2, sizeof($images)-1); ?> <img src="images/<?php echo $images[$i]; ?>" alt="" /> 

Ниже код проверяет список изображений по расширению изображения.


<?php function validImages($image) { $extensions = array('jpg','jpeg','png','gif'); if(in_array(array_pop(explode(".", $image)), $extensions)) { return $image; } } $images_folder_path = ROOT.'/web/files/Header/'; $relative_path = SITE_URL.'/web/files/Header/'; $images = array_filter(array_map("validImages", scandir($images_folder_path))); $rand_keys = array_rand($images,1); ?> <?php if(isset($images[$rand_keys])): ?> <img src="<?php echo $relative_path.$images[$rand_keys]; ?>" alt="" /> <?php endif; ?>

 function get_rand_img($dir) { $arr = array(); $list = scandir($dir); foreach ($list as $file) { if (!isset($img)) { $img = ''; } if (is_file($dir . '/' . $file)) { $ext = end(explode('.', $file)); if ($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') { array_push($arr, $file); $img = $file; } } } if ($img != '') { $img = array_rand($arr); $img = $arr[$img]; } $img = str_replace("'", "\'", $img); $img = str_replace(" ", "%20", $img); return $img; } echo get_rand_img('images'); 

замените «изображения» на вашу папку.

В течение нескольких часов я искал в Интернете, чтобы реализовать код, который я хотел. Я собрал несколько различных ответов, которые я нашел в Интернете. Вот код:

 <?php $folder = opendir("Images/Gallery Images/"); $i = 1; while (false != ($file = readdir($folder))) { if ($file != "." && $file != "..") { $images[$i] = $file; $i++; } } //This is the important part... for ($i = 1; $i <= 5; $i++) { //Starting at 1, count up to 5 images (change to suit) $random_img = rand(1, count($images) - 1); if (!empty($images[$random_img])) { //without this I was sometimes getting empty values echo '<img src="Images/Gallery Images/' . $images[$random_img] . '" alt="Photo ' . pathinfo($images[$random_img], PATHINFO_FILENAME) . '" />'; echo '<script>console.log("' . $images[$random_img] . '")</script>'; //Just to help me debug unset($images[$random_img]); //unset each image in array so we don't have double images } } ?> не <?php $folder = opendir("Images/Gallery Images/"); $i = 1; while (false != ($file = readdir($folder))) { if ($file != "." && $file != "..") { $images[$i] = $file; $i++; } } //This is the important part... for ($i = 1; $i <= 5; $i++) { //Starting at 1, count up to 5 images (change to suit) $random_img = rand(1, count($images) - 1); if (!empty($images[$random_img])) { //without this I was sometimes getting empty values echo '<img src="Images/Gallery Images/' . $images[$random_img] . '" alt="Photo ' . pathinfo($images[$random_img], PATHINFO_FILENAME) . '" />'; echo '<script>console.log("' . $images[$random_img] . '")</script>'; //Just to help me debug unset($images[$random_img]); //unset each image in array so we don't have double images } } ?> 

Используя этот метод, я смог реализовать opendir без ошибок (поскольку glob() не работал для меня), я смог вытащить 5 изображений для галереи карусели и избавиться от дубликатов изображений и разобраться в пустых значениях. Один недостаток использования моего метода заключается в том, что количество снимков варьируется от 3 до 5 изображений в галерее, вероятно, из-за удаления пустых значений. Который не беспокоил меня слишком много, поскольку он работает по мере необходимости. Если кто-то может улучшить мой метод, я приветствую вас сделать это. Рабочий пример (первая галерея карусели на вершине веб-сайта): Eastfield Joinery