Офис НП AMWAY в Ярославле
Купить продукцию Амвей в Ярославле
На карте Купить AMWAY в ЯрославлеПриобрести высококачественную продукцию Амвей в Ярославле, получить консультации по бизнесу, заказать продукцию или получить заказ:
Адрес: улица Валентины Терешковой, дом 1 (Вход со двора)
Телефон: +7 (920) 112-00-91
Email: matyxho@mail.ru
Сайт: https://www.amway.ru/user/lebedem
Визитка: http://yar.meweb.ru
Иерархия статей
Статьи » Программирование » PHP: Вывод изображений из папки (директории)
Сниппет
При создании одного из плагинов понадобилось мне показать все изображения из указанной папки (директории). Признаться, раньше я не работал с подобным, но все новое всегда вызывает азарт. Поэтому, чуть погуглив и покурив мануалы, я набросал несколько строк кода, коими и поделюсь с вами.
PHP: Вывод изображений из папки (директории)
Опубликовал  Pisatel Добавлено  06-04-2015 15:36 06 Апрель 2015 15:36:11 12911  Прочтений 12911 Прочтений  14 Комментариев 14 Комментариев
Обновлено: 06-04-2015 16:00 Обновлено: 06 апреля 2015 16:00:17  printer
В данной статье приведу небольшой скрипт, который ищет изображения в указанной папке (директории) и выводит их. Для начала — вывод всех изображений из папки (как всегда- комментарии прямо в коде):

Код: PHP


$wimage = "";

$fimg = "";

$path = "images/"; // задаем путь до сканируемой папки с изображениями

$images = scandir($path); // сканируем папку

if ($images !== false) { // если нет ошибок при сканировании

$images = preg_grep("/\.(?:png|gif|jpe?g)$/i", $images); // через регулярку создаем массив только изображений

if (is_array($images)) { // если изображения найдены

foreach($images as $image) { // делаем проход по массиву

$fimg .= "<img src='".$path.htmlspecialchars(urlencode($image))."' alt='".$image."' />";

}

$wimage .= $fimg;

} else { // иначе, если нет изображений

$wimage .= "<div style='text-align:center'>Не обнаружено изображений в директории!</div>\n";

}

} else { // иначе, если директория пуста или произошла ошибка

$wimage .= "<div style='text-align:center'>Директория пуста или произошла ошибка при сканировании.</div>";

}

echo $wimage; // выводим полученный результат




Однако, задачи бывают разные. Попробую привести несколько примеров. Например, нам необходимо вывести не все изображения, а только первые 10. Для этого нужно будет лишь задать дополнительное условие при проходе по массиву. Итак, код с комментариями:

Код: PHP
    $stop = 9; // на 1 меньше, так как ключи в массиве начинаются с 0, то есть

// 0, 1, 2..., значит первые 10 значений закончатся на ключе 9

foreach($images as $key => $image) { // делаем проход по массиву, выбирая ключ => значение

$fimg .= "<img src='".$path.htmlspecialchars(urlencode($image))."' alt='".$image."' />";

if ($stop == $key) break; // останавливаем проход по массиву, когда 9==9

}




Следующий пример — выберем, например, каждое второе изображение:

Код: PHP
    foreach($images as $key => $image) { // делаем проход по массиву, выбирая ключ => значение

if ($key % 2 == 0) { // если целочисленный остаток от деления ключа на 2 равен 0

$fimg .= "<img src='".$path.htmlspecialchars(urlencode($image))."' alt='".$image."' />";

} else { // иначе

continue; // пропускаем изображение

}

}




Ну и на закуску — выберем 5 случайных (рандомных) изображений из папки (каталога). Для этого я воспользуюсь php–функцией array_rand();, и код придется чуть усложнить, увеличив буквально на пару строк:

Код: PHP
    $arand = array_rand($images, 5); // получили массив 5 случайных ключей (ключ массива => ключ изображения)

$i = 0;

foreach($images as $key => $image) { // проход по массиву

if ($arand[$i] == $key) {

// если значение случайного ключа равно текущему ключу- выводим изображение

$fimg .= "<img src='".$path.htmlspecialchars(urlencode($image))."' alt='".$image."' />";

} else { // иначе

continue; // пропускаем

}

$i++;

}




Если кто–то сможет сделать это более изящно — милости прошу. Я лично всегда стараюсь использовать для работы с массивами функции, которые специально предназначены для работы с ними и не изобретать велосипедов.

На этом, в общем, и закончу. Удачи в кодинге и процветания твоему проекту!
Понравилась статья?
Метки для данной статьи
Похожие статьи
Поделиться:   
Комментарии
#1 | Сігморд 13 августа 2017 17:05:13
No Avatar
Гость
Здуріти як сьо файно.
Тіко я не тямлю ніц, у тому шо треба зробити, у фІнальному слові.
Скажіть, що треба, чи є таке, що виводити з певної папки на монітор одне зображення? В день. Чи в час?
#2 | Pisatel 14 августа 2017 13:50:18
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Сігморд, не понял вопрос. Гугл-переводчик тоже не помог)) Можно по-русски?
Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
#3 | Евгений 14 сентября 2017 23:26:25
No Avatar
Гость
Здравствуйте, подскажите новичку. Когда нам нужно вывести 5 случайных изображений, то приведенный вами код вставляется вместо 14 и 15 строчки кода (foreach($images as $image) { // делаем проход по массиву)?
#4 | Pisatel 27 сентября 2017 20:12:21
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Доброго времени суток! Так попробуйте
Код
    $wimage = "";
    $fimg = "";
    $path = "images/"; // задаем путь до сканируемой папки с изображениями
    $images = scandir($path); // сканируем папку
        if ($images !== false) { // если нет ошибок при сканировании
    $images = preg_grep("/\.(?:png|gif|jpe?g)$/i", $images); // через регулярку создаем массив только изображений
        if (is_array($images)) { // если изображения найдены
    $arand = array_rand($images, 5); // получили массив 5 случайных ключей (ключ массива => ключ изображения)
    $i = 0;
            foreach($images as $key => $image) { // проход по массиву
        if ($arand[$i] == $key) {
 // если значение случайного ключа равно текущему ключу- выводим изображение
    $fimg .= "<img src='".$path.htmlspecialchars(urlencode($image))."' alt='".$image."' />";
        } else { // иначе
    continue; // пропускаем
   }
    $i++;
}
    $wimage .= $fimg;
        } else { // иначе, если нет изображений
    $wimage .= "<div style='text-align:center'>Не обнаружено изображений в директории!</div>\n";
    }
        } else { // иначе, если директория пуста или произошла ошибка
        $wimage .= "<div style='text-align:center'>Директория пуста или произошла ошибка при сканировании.</div>";
}
    echo $wimage; // выводим полученный результат

Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
#5 | user 08 марта 2018 11:30:36
No Avatar
Гость
Заработало с первого раза. Хотел было только 1 изображение вывести, но минимум - 2.
Сенкс!
#6 | Вадим 19 апреля 2018 19:38:26
No Avatar
Гость
Pisatel, подскажите, пожалуйста, какой добавить код, чтобы скрипт не трогал картинку внутри папки с именем photo1.jpg? То есть чтобы все картинки проверялись и выводились, а photo1.jpg была исключением и не выводилась. Спасибо.
#7 | Pisatel 19 апреля 2018 19:55:24
Avatar
Отсутствует
Супер Администратор
Активный
С 03. февраля 2013
Эх, давно не был тут)) Вадим, ответил на почту. user, та не за что))
Я не европеец. И не азиат. Я русский. Я россиянин. Я за истинные семейные христианские ценности. И это - моя национальная идея.
#8 | Артур 02 июля 2018 17:22:52
No Avatar
Гость
Здравствуйте. А можно сделать так, чтобы на сайте выводились изображения по нажатию кнопки? Я так понимаю в вашем примере изображения случайным образом генерируются на странице при переходе на нее
#9 | Владимр 28 августа 2018 19:42:48
No Avatar
Гость
Добрый День!
могли бы подсказать как написать код, что из папки выводило не все картинки а по одной и что бы можно было задать этот интервал в минутах например?
#10 | Антон 30 марта 2019 01:38:46
No Avatar
Гость
Pisatel, подскажите, пожалуйста, как задать абсолютный путь до сканируемой папки с изображениями? Дело в том, что у меня в корневой папке оригинал сайта на русском, а в папке en - на другом языке. Если использовать Вашу функцию с указанием относительного пути к папке, то картинки не выводятся, потому что к урлам картинок добавляется название языковой папки (например, вместо site.ru/gallery/image.png урлы получаются такие: site.ru/en/gallery/image.png, а по ним, конечно, картинок нет). Всякие там dirname(__FILE__) . и $_SERVER['SERVER_NAME'] . выдают ошибки типа Warning: scandir(site.ru/gallery/): failed to open dir: No such file or directory in. Заранее спасибо за ответ.
#11 | Jamestwews 08 мая 2019 09:59:35
No Avatar
Гость
Оригинальный парфюм.Доставка по России.
https://youla.ru/user/581382d904559fdd2fd4a004
#12 | DavidDwess 27 мая 2019 23:14:54
No Avatar
Гость
Всем,кто знаком с продвижением сайтов и закупкой ссылок,а также
с покупкой рекламы в Яндекс и Google этот СОФТ станет незаменимым
помощником.
У программы есть полная документация по настройки и запуску,а также
отзывчивая техническая поддержка,уроки на Youtube,закрытый форум с поддержкой
Русского,Английского,Немецкого языков.
При покупке по данным ссылкам предоставляется скидка!!!
Вам доступно (бесплатно) регистрация и в личном кабинете у Вас будет
возможность ознакомиться с документацией перед возможной покупкой.

http://offeramazon.ru/2019/05/27/методы-продвижения/
#13 | abbakdof 05 июля 2019 12:46:46
No Avatar
Гость
test
#14 | abbakdof 06 июля 2019 22:14:57
No Avatar
Гость
test
Добавить комментарий
Имя:

Проверочный код:
Последние активные темы форума
  Темы Просмотров Ответов Последние сообщения
folder Плагин Email рассылки Mail To All by Pisatel
CMS PHP Fusion
12614 33 promask
27. апреля 2019
folder Вопрос по переделке bb-кода
PHP, MySQL
3159 5 Pisatel
26. мая 2017
folder Вопросы по Ajax форме обратной связи
CMS PHP Fusion
12878 48 Ditrin
19. февраля 2017
folder BBCode YouTube Video Colorbox mod
CMS PHP Fusion
7536 2 Pisatel
10. декабря 2016
folder Как лучше создать собственную страницу?
CMS PHP Fusion
6711 17 Pisatel
11. мая 2016
folder Небольшие вопросы по скриптам магазина и катало...
PHP, MySQL
51237 80 Pisatel
11. января 2016
folder BBCode Code mod
CMS PHP Fusion
3903 0 Pisatel
31. августа 2015
folder Ajax Like Dislike Article Panel
CMS PHP Fusion
7880 16 Pisatel
07. июля 2015
folder Хлебные крошки / BreadCrumbs SEO Panel
CMS PHP Fusion
8816 17 Pisatel
04. июля 2015
folder Abbr Description BBCode
CMS PHP Fusion
2913 0 Pisatel
15. июня 2015
folder Подозрительный трафик и прочие страшилки
Всякая хрень
5463 2 Ditrin
23. апреля 2015
folder Мод Newsletter - рассылка писем пользователям с...
CMS PHP Fusion
7412 13 Pisatel
10. апреля 2015
folder Мод отправки писем PHPMailer для PHP-Fusion
CMS PHP Fusion
39608 113 Ditrin
06. апреля 2015
folder Появление неизвестного файла subscriptions.php
CMS PHP Fusion
3595 2 Pisatel
06. апреля 2015
folder Autoban on IP
CMS PHP Fusion
13373 13 Pisatel
03. апреля 2015