Задание к уроку 5 PHP. Загрузка файла и отправка email

Автор: | 11.09.2015

Задание:

Написать обработчик загрузки изображения и отправить уведомление на почту.

Загрузка файла.

Подготовим наш документ:

<!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]