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