Link in progress
Обо мне
$_FILES. Уроки PHP

$_FILES. Уроки PHP
В этом уроке мы продолжим тему обработку и сохранение файлов средствами PHP использую суперглобальную переменную $_FILES.
План урока
1. Добавление новой колонки в БД и изменение страницы «Добавление участника»;
2. Суперглобальная переменна $_FILES – несколько слов;
3. Добавление имени изображение в БД;
4. Изменение страницы рейтинга для показа изображений атлетов;
5. То, что не было сделано.

1. Добавление новой колонки в БД и изменение страницы «Добавление участника»

В прошлом уроке мы внесли изменения в форму HTML, и теперь у нас есть кнопка, которая позволяет выбрать файл изображения на ПК. Но это не все изменения, которые нужно сделать передачи файла на сервер. Сейчас идет речь о странице «Добавление участника» и ее HTML формы.

1
<form enctype="multipart/form-data" method="post" action="<?PHP $_SERVER['PHP_SELF']?>">

Интерес вызывает свойство enctype. Этот атрибут формы говорит ей использовать специальный метод кодирование данных, и POST уже будет знать, как их правильно упаковать и передать на сервер. Для безопасности всегда нужно указывать максимальный размер загружаемого файла:

1
<input type="hidden" name="MAX_file_size" value="512000" />

В форме значение принимается в байтах, 512000б = 512кб. Вот теперь форма полностью готова до передачи изображения (и не только их) на сервер, где их должен принимать и обрабатывать PHP. Мы будем добавлять не само изображение в БД, а его имя. Для этого нам нужна еще одна колонка в БД. Добавим новою колонку:

1
ALTER TABLE sport ADD COLUMN photo VARCHAR(250)

2. Суперглобальная переменна $_FILES – несколько слов

Передача, обработка и сохранения файлов нам предоставляет суперглобальная переменна PHP — $_FILES. Как и $_POST она является массивом, которая включает в себя следующую информацию о файле: имя, размер в байтах, тип файла (MIMO), временное имя файла после загрузки на сервер и ошибку, которая может возникнуть при загрузке файла.

1
2
3
4
5
$_FILES[‘$photo][‘name’] – имя;
$_FILES[‘$photo][‘size’] –размер;
$_FILES[‘$photo][‘type’] –тип файла;
$_FILES[‘$photo][‘tmp_name’] – временное имя файла;
$_FILES[‘$photo][‘error’] – ошибка.

3. Добавление имени изображение в БД

Что бы не делать БД огромной и корявой, мы будем добавлять в нее только имена загружаемых файлов. Вы скажете, а как же мы выведем это изображение на страницу, если у нас будут только имена файлов? Дело в том, что сами файлы будут хранится в специальном каталоге, пусть будет указан через константу а имя – будет браться из БД. Читайте далее и вы все поймете.
Мы уже создали колонку, в которую будут попадать имена загружаемых изображений, осталось только получить имена файлов, сделаем это так:

1
$photoName = $_FILES['photo']['name'];

В переменной $photoName будет храниться имя файла, его мы и добавим и БД:

1
$query = "INSERT INTO sport VALUES ('', '$name', NOW(), '$weight', '$photoName')";

После загрузки, все файлы попадают в так называемую временную папку и получают случайное имя (набор букв и цифр). А нам нужно, например, что бы все загружаемые файлы попадали в каталог upload и имели адекватное имя.

1
2
3
4
5
define ('IMAGE_PAPH','upload/'); - создается константа IMAGE_PAPH, которая будем сохранять в себе путь к папке, куда мы хотим сохранять изображения.

$photo = IMAGE_PAPH . $photoName; - в переменную $photo будет записано путь и имя загружаемого файла, например: upload/myPic.jpg.

move_uploaded_file($_FILES['photo']['tmp_name'], $photo) – перемещаем временный и называем временный файл так, куда и как указано в переменной $photo.

move_uploaded_file() –проверяет файл и перемещает его в указанное место.

4. Изменение страницы рейтинга для показа изображений атлетов

Файлы у нас сохраняются на сервере, осталось вывести изображение на страницу рейтинга:

1
2
3
4
5
6
7
8
define ('IMAGE_PAPH','upload/'); - записываем константу
define ('MAX_PIX','150px'); - константа и максимальным размером изображения;

if (is_file(IMAGE_PAPH . $rank['photo']) && filesize(IMAGE_PAPH . $rank['photo']) > 0) {
echo '<b>Фото:</b><br /> <img src="' . IMAGE_PAPH . $rank['photo'] . '" width="' . MAX_PIX . '" />';
} else {
echo '<b>Фото:</b><br /> <img src="' . IMAGE_PAPH . 'Nophoto.jpg" width="' . MAX_PIX . '" />';
} - выводим само фото, перед этим проверяем, действительно ли это файл и имеет данные больше 0 байт, а если фото нет – тогда выводим картинку Nophoto.jpg.

5. То, что не было сделано

А если изображение, которые загружают участники, будут иметь одинаковые имена, что будет? Конечно, файл будет замен и это не хорошо. Что бы такую ситуацию избежать, можно к имени изображение добавлять, например точное время загрузи, использую time():

1
$photo = IMAGE_PAPH . time() . $photoName;

В результате, имя файла будет примерно такое: 1453825052pic.jpg, где 1453825052 – время выражено в секундах, а pic.jpg – имя файла, который загружался. Усовершенствовать этот рейтинг мы будет еще не раз, следите за следующими уроками по PHP.

С вами был ProIN, до скорой встречи.

P.S.
Файлы урока будут добавлены в следующем уроке 🙂

$_FILES. Уроки PHP: 2 комментария

  1. Дамир

    Здравствуйте а вы можете сказать какой урок был до этого урока $_FILES. Уроки PHP? Просто у вас в начале написано что типо давайте продолжим урок по php с массивом FILES и не хочу пропустить самый первый урок по этой теме.Можете скинуть ссылку?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio