Задание:
Написать обработчик загрузки изображения и отправить уведомление на почту.
Загрузка файла.
Подготовим наш документ:
<!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]