Задание:
Написать обработчик загрузки изображения и отправить уведомление на почту.
Загрузка файла.
Подготовим наш документ:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Загрузка файла</title> </head> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Загрузить изображение" name="submit"> </form> </body> </html>
[spoiler title=»Решение»]
Далее нужно написать скрипт обработки изображения и загрузки его на сервер:
<? $type = explode('/', $_FILES['fileToUpload']['type'])[1]; if($type == "jpeg" or $type == "png" or $type == "bmp" or $type == "gif") { $filename = 'my_first_uploaded_image.' . $type; $uploaddir = 'uploads/'; $uploadfile = $uploaddir . $filename; if(!file_exists($uploaddir)) { mkdir($uploaddir); } if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) { echo "Файл корректен и был успешно загружен. <a href='index.php'>Вернуться.</a>\n"; } else { echo "Во время загрузки произошла ошибка! <a href='index.php'>Попробуйте снова.</a>\n"; } } else { echo "Неверный тип изображения, проверьте загружаемый файл и <a href='index.php'>попробуйте снова.</a> <br>Типы файлов которые могут быть загружены:<br> JPEG, JPG, PNG, BMP, GIF"; } ?>
Итак теперь по порядку:
<form action="upload.php" method="post" enctype="multipart/form-data">
Атрибуты формы следующие:
Аттрибут | Описание |
action=»upload.php» | Устанавливает какой файл будет использоваться в качестве обработчика. |
method=»post» | Устанавливает метод которым будет отправлена информация |
enctype=»multipart/form-data» | Устанавливает тип отправляемого файла |
$type = explode('/', $_FILES['fileToUpload']['type'])[1];
Функция explode($delimer, $string);
Разбивает строку на массив.
$delimer -> Разделитель, символ по которому будет разбита строка $string
$_FILES[‘fileToUpload‘][‘type‘] -> Глобальный массив файлов, type определяет тип отправляемого изображения.
if($type == "jpeg" or $type == "png" or $type == "bmp" or $type == "gif") { ... } else { echo "Неверный тип изображения, проверьте загружаемый файл и <a href='index.php'>попробуйте снова.</a> <br>Типы файлов которые могут быть загружены:<br> JPEG, JPG, PNG, BMP, GIF"; }
Условие проверки типа загружаемого файла, в нашем случае изображения. если условие не выполняется выводим сообщение с ошибкой, иначе загружаем файл.
$filename = 'my_first_uploaded_image.' . $type; $uploaddir = 'uploads/'; $uploadfile = $uploaddir . $filename;
$filename -> Название нашего изображения, устанавливает статическое.
$uploaddir -> Директория куда будем сохранять изображение
$uploadfile -> Полный путь для сохранения изображения
if(!file_exists($uploaddir)) { mkdir($uploaddir); }
Проверяем существует ли наша директория, если нет то создаем ее.
if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) { echo "Файл корректен и был успешно загружен. <a href='index.php'>Вернуться.</a>\n"; } else { echo "Во время загрузки произошла ошибка! <a href='index.php'>Попробуйте снова.</a>\n"; }
Заливаем изображение на сервер, и если все прошло успешно выводим соответствующее сообщение.
С загрузкой изображения все.
Идем дальше отправляем уведомление на почту о том что был загружен файл и его оригинальное название.
... if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) { echo "Файл корректен и был успешно загружен. <a href='index.php'>Вернуться.</a>\n"; $message = 'Загружено новое изображение с названием: ' . $_FILES['fileToUpload']['name']; send_email('Твой раб', $message); } else { ...
Добавляем 2 строчки в условие если загрузка прошла успешно:
$message = 'Загружено новое изображение с названием: ' . $_FILES['fileToUpload']['name']; send_email('Твой раб', $message);
и дописываем в конец нашего скрипта вот такую функцию:
function send_email($name = 'Аноним', $message = 'Я дефолтное сообщение, кажется мой хозяйн забыл меня исправить :с') { $subject = 'Уведомление о загрузке изображения'; $name = "=?UTF-8?B?".base64_encode($name)."?="; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $to = 'mail@my-site.ru'; #$to = 'alex@goldstudio.kz'; $headers = "From: $name\r\n"; $headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n"; //var_dump($to, $subject, $message); $message = wordwrap($message, 70); $send = mail($to, $subject, $message, $headers); }
Она то и будет отвечать за отправку сообщения на почту.
Собственно вот наш готовый скрипт:
<? $type = explode('/', $_FILES['fileToUpload']['type'])[1]; if($type == "jpeg" or $type == "png" or $type == "bmp" or $type == "gif") { $filename = 'my_first_uploaded_image.' . $type; $uploaddir = 'uploads/'; $uploadfile = $uploaddir . $filename; if(!file_exists($uploaddir)) { mkdir($uploaddir); } if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $uploadfile)) { echo "Файл корректен и был успешно загружен. <a href='index.php'>Вернуться.</a>\n"; $message = 'Загружено новое изображение с названием: ' . $_FILES['fileToUpload']['name']; send_email('Твой раб', $message); } else { echo "Во время загрузки произошла ошибка! <a href='index.php'>Попробуйте снова.</a>\n"; } } else { echo "Неверный тип изображения, проверьте загружаемый файл и <a href='index.php'>попробуйте снова.</a> <br>Типы файлов которые могут быть загружены:<br> JPEG, JPG, PNG, BMP, GIF"; } function send_email($name = 'Аноним', $message = 'Я дефолтное сообщение, кажется мой хозяйн забыл меня исправить :с') { $subject = 'Уведомление о загрузке изображения'; $name = "=?UTF-8?B?".base64_encode($name)."?="; $subject = "=?UTF-8?B?".base64_encode($subject)."?="; $to = 'mail@my-site.ru'; #$to = 'alex@goldstudio.kz'; $headers = "From: $name\r\n"; $headers .= "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text/html; charset=UTF-8" . "\r\n"; //var_dump($to, $subject, $message); $message = wordwrap($message, 70); $send = mail($to, $subject, $message, $headers); } ?>
Enjoy 🙂
[/spoiler]