1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php include_once 'functions.php'; // подключаем файл функций if(isset($_FILES['fupload'])){ // есть ли в массиве файлов такой файл if(upload_image($_FILES['fupload'])){ // загружаем header('location: index.php'); // возвращаем пользователя exit(); } else{ exit('Ошибка при загрузке файла!'); } } $images = get_gallery(); // если пользователь перешел методом get ?> |
Файл index.php код до головы хтмла. Инклюдим наш основной файл. Если пользователь зашёл методом гет мы показываем ему всю галерею. Он должен зайти методом гет, поэтому используется функция перенаправления.
1 2 3 4 5 6 7 8 9 10 11 |
<h2>Загрузка изображения </h2> <form method="post" enctype="multipart/form-data" action="" > <input type="file" name="fupload"/> <input type="submit" value="Загрузить фаил"/> </form> <?php foreach($images as $image){ echo '<a href = "img_big/' . $image . '" target="_blank"><img src="img_small/' . $image . '"/> </a>'; } ?> |
Форма загрузки и вывода галереи. action страницы выставлен на самого себя, т.е. оставлен пустым
А вот цикл foreach будет похитрее. Каждое изображение из папки small мы оборачиваем ссылкой на папку с изображениями big. В эти значения попадают ссылки на изображения.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function get_gallery(){ $images = array(); $handle = opendir('img_small'); //Открывает директорию картинок if ($handle != false){ while (false !== ($file = readdir($handle))){ if($file != '.' && $file != '..') //Тут отлавливаем точки которые попадают в массив $images[] = $file; // имена файлов складируем в массив } closedir ($handle); } return $images; } function upload_image($file){ if(!check_upload($file)) // проверяем возможно ли загрузка return false; else{ copy($file['tmp_name'], 'img_big/' . $file['name']); img_resize($file['tmp_name'], 'img_small/' . $file['name'], 250, 250); //Задаём размеры, работаем с функцией return true; } } function check_upload($file){ if($file['name'] == ''){ return false; } if($file['size'] > 3000000){ ////3 мегабайта return false; } $types = array('image/jpg', 'image/jpeg', 'image/png', 'image/bmp', 'image/gif'); if(!in_array($file['type'], $types))// принимает значение записанные в type и массив допустимых значений types { return false; // если фаин не входит в допустимые значение то false } return true; // если все норм, то function upload_image будет else } |
get_gallery читает и возвращает файлы из папки с миниатюрами. Обратите внимание на складирование в массив.
upload_image В эту функцию попадает изображение которое мы загружали. И мы вызывали эту функцию в индексном файле. Та в свою очередь вызывает функцию по проверке загружаемого изображения на имя, размер и разрешённые форматы(спец функция in_array).
После этого функция upload_image копирует файл из временной папки сервера на сам сайт. И вызывает функцию img_resize
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/*********************************************************************************** Ссылка на оригинальный топик: http://forum.php.su/topic.php?forum=35&topic=12# Ссылка на часть которой пользовался автор: http://www.php5[dot]ru/articles/image#size Функция img_resize(): генерация thumbnails Параметры: $src - имя исходного файла $dest - имя генерируемого файла $width, $height - ширина и высота генерируемого изображения, в пикселях Необязательные параметры: $rgb - цвет фона, по умолчанию - белый $quality - качество генерируемого JPEG, по умолчанию - максимальное (100) ***********************************************************************************/ function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100) { if (!file_exists($src)) return false; $size = getimagesize($src); if ($size === false) return false; // Определяем исходный формат по MIME-информации, предоставленной // функцией getimagesize, и выбираем соответствующую формату // imagecreatefrom-функцию. $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1)); $icfunc = "imagecreatefrom" . $format; if (!function_exists($icfunc)) return false; $x_ratio = $width / $size[0]; $y_ratio = $height / $size[1]; $ratio = min($x_ratio, $y_ratio); $use_x_ratio = ($x_ratio == $ratio); $new_width = $use_x_ratio ? $width : floor($size[0] * $ratio); $new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio); $new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2); $new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2); $isrc = $icfunc($src); $idest = imagecreatetruecolor($width, $height); imagefill($idest, 0, 0, $rgb); imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]); imagejpeg($idest, $dest, $quality); imagedestroy($isrc); imagedestroy($idest); return true; } |
Тут используется много разных функций и математические формулы, в которых я ничего пока не понимаю, но факт в том что изображения режется и логика прослеживается, и код не такой уж и большой.
Что у меня в папке:
Должно получиться что то подобное.
Но готовый файл лучше тысячи слов: Галерея на php
| Категория: PHP
| Тэги: PHP / галерея / ШП