Доброго времени суток! По просьбе одно моего хорошего знакомого, выкладываю пару набросков по тому, как достать случайную фотографию из папки на сайт. На самом деле я в глаза не видел ситуации, но попытаюсь вкратце описать и составить небольшое задание (кстати уже почти выливается в традицию делать такие блоки):
Задача: существует директория с фотографиями расширения *.jpg, *.gif, *.png, нет никакой таблицы в базе данных для хранения путей к фотографиям и есть место на сайте, где нужно вывести эту "случайную фотографию"
Во первых нам потребуется - создать директорию, под любым названием и положить туда несколько картинок или же фотографий. Кстати, тут есть один важный момент - расширение, с которым будут показываться "случайные фото", но об этом далее, сначала функция!
<?
function randomImage($path = 'images/de') {
//если директория не существует
if (!opendir($path)) {
return 'Ошибка! Вы указали неверную директорию!';
}
//иначе
else {
//открываем папку
$dir = opendir($path);
//читаем содержимое
while(($img = readdir($dir)) !== false) {
//определяем расширение файлов
$res = substr(strrchr($img,'.'), 1);
//если расширение *.gif, *.jpg, *.png и файл существует
if (is_file($img) && ($res == 'gif') || ($res == 'jpg') || ($res == 'png')) {
//записываем файлы в массим $imgname[]
$imgname[] = $path.'/'.$img;
}
}
//закрываем директорию
closedir($dir);
//считаем количество файлов
$i = rand(0, count($imgname)-1);
//записываем вывод изображения в переменную $result
$result = '<img src="'.$imgname[$i].'">';
return $result;
}
}
//выводим функцию в нужном месте
print randomImage();
?>
Что я здесь написал такое и что сделать, чтобы это работало у вас? Для начала нам надо будет вставить функцию целиком в какой-нибудь основной класс сайта (если таковой имеется) или же просто в файл с функциями. Дальше нужно вывести функцию в нужно месте сайта <?print randomImage($dir)?>, где $dir - это ваша директория, или <?print $someclass->randomImage($dir)?>, если вы работаете с классами.
После вывода в нужном месте, происходит следующее: функция читает папку, если таковой нет - ошибка, если есть, то читает все лежащие внутри файлы. Если эти файлы существуют и они с расширением *.jpg, *.png или же *.gif, то складывает их названия и пути к ним в массив, после чего методом случайных значений по индексу элемента в массиве выводится фотография.
Важно! Как раз то важное о разрешении (формате). В таком виде функции нужно указывать путь к превью фотографий, иначе фото выводится в полном размере, а если у вас блок для вывода маленький, а фото 1600х1200, то понимаете что будет. Если указать вручную размеры фото в <img src="" width=""..., то фото будет выводится маленьким, а загружаться полностью. То есть увидели на странице фото 150х100, а фактически загрузили 1600х1200 размером 5 Мб. Так что будут проблемы с загрузкой страницы. Вывод: превью.
Специально для жителя из Гаспры, с уважением Я!
Знаете ли вы?
Что в Америке принято совать в розетку 3 пальца.