Доброго времени суток! По просьбе одно моего хорошего знакомого, выкладываю пару набросков по тому, как достать случайную фотографию из папки на сайт. На самом деле я в глаза не видел ситуации, но попытаюсь вкратце описать и составить небольшое задание (кстати уже почти выливается в традицию делать такие блоки):

Задача: существует директория с фотографиями расширения *.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 пальца.

KDPsite...