Advertisement
Guest User

Untitled

a guest
Aug 21st, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. // HTML form
  2. <form action="upload.php" method="post" enctype="multipart/form-data">
  3. <input type="file" name="image" required>
  4. <button type="submit">Загрузить</button>
  5. </form>
  6.  
  7. <?php
  8. // File upload.php
  9. // Если в $_FILES существует "image" и она не NULL
  10. if (isset($_FILES['image'])) {
  11. // Получаем нужные элементы массива "image"
  12. $fileTmpName = $_FILES['image']['tmp_name'];
  13. $errorCode = $_FILES['image']['error'];
  14. // Проверим на ошибки
  15. if ($errorCode !== UPLOAD_ERR_OK || !is_uploaded_file($fileTmpName)) {
  16. // Массив с названиями ошибок
  17. $errorMessages = [
  18. UPLOAD_ERR_INI_SIZE => 'Размер файла превысил значение upload_max_filesize в конфигурации PHP.',
  19. UPLOAD_ERR_FORM_SIZE => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE в HTML-форме.',
  20. UPLOAD_ERR_PARTIAL => 'Загружаемый файл был получен только частично.',
  21. UPLOAD_ERR_NO_FILE => 'Файл не был загружен.',
  22. UPLOAD_ERR_NO_TMP_DIR => 'Отсутствует временная папка.',
  23. UPLOAD_ERR_CANT_WRITE => 'Не удалось записать файл на диск.',
  24. UPLOAD_ERR_EXTENSION => 'PHP-расширение остановило загрузку файла.',
  25. ];
  26. // Зададим неизвестную ошибку
  27. $unknownMessage = 'При загрузке файла произошла неизвестная ошибка.';
  28. // Если в массиве нет кода ошибки, скажем, что ошибка неизвестна
  29. $outputMessage = isset($errorMessages[$errorCode]) ? $errorMessages[$errorCode] : $unknownMessage;
  30. // Выведем название ошибки
  31. die($outputMessage);
  32. } else {
  33. // Создадим ресурс FileInfo
  34. $fi = finfo_open(FILEINFO_MIME_TYPE);
  35. // Получим MIME-тип
  36. $mime = (string) finfo_file($fi, $fileTmpName);
  37. // Проверим ключевое слово image (image/jpeg, image/png и т. д.)
  38. if (strpos($mime, 'image') === false) die('Можно загружать только изображения.');
  39.  
  40. // Результат функции запишем в переменную
  41. $image = getimagesize($fileTmpName);
  42.  
  43. // Зададим ограничения для картинок
  44. $limitBytes = 1024 * 1024 * 5;
  45. $limitWidth = 1280;
  46. $limitHeight = 768;
  47.  
  48. // Проверим нужные параметры
  49. if (filesize($fileTmpName) > $limitBytes) die('Размер изображения не должен превышать 5 Мбайт.');
  50. if ($image[1] > $limitHeight) die('Высота изображения не должна превышать 768 точек.');
  51. if ($image[0] > $limitWidth) die('Ширина изображения не должна превышать 1280 точек.');
  52.  
  53. // Сгенерируем новое имя файла через функцию getRandomFileName()
  54. $name = getRandomFileName($fileTmpName);
  55.  
  56. // Сгенерируем расширение файла на основе типа картинки
  57. $extension = image_type_to_extension($image[2]);
  58.  
  59. // Сократим .jpeg до .jpg
  60. $format = str_replace('jpeg', 'jpg', $extension);
  61.  
  62. // Переместим картинку с новым именем и расширением в папку /upload
  63. if (!move_uploaded_file($fileTmpName, __DIR__ . '/upload/' . $name . $format)) {
  64. die('При записи изображения на диск произошла ошибка.');
  65. }
  66.  
  67. echo 'Картинка успешно загружена!';
  68. }
  69. };
  70.  
  71. // File functions.php
  72. function getRandomFileName($path)
  73. {
  74. $path = $path ? $path . '/' : '';
  75. do {
  76. $name = md5(microtime() . rand(0, 9999));
  77. $file = $path . $name;
  78. } while (file_exists($file));
  79.  
  80. return $name;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement