Способ 1
// папка, куда будет загружаться
$path_to_90_directory = 'pics/';
// проверка формата
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
{
$filename = $_FILES['fupload']['name'];
$source = $_FILES['fupload']['tmp_name'];
$target = $path_to_90_directory . $filename;
// загрузка оригинала в папку $path_to_90_directory
move_uploaded_file($source, $target);
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
// если оригинал был в формате gif, то создаем изображение в этом же формате
$im = imagecreatefromgif($path_to_90_directory.$filename);
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
// если оригинал был в формате png, то создаем изображение в этом же формате
$im = imagecreatefrompng($path_to_90_directory.$filename);
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
//если оригинал был в формате jpg, то создаем изображение в этом же формате
$im = imagecreatefromjpeg($path_to_90_directory.$filename);
}
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ
// Создание квадрата 90x90
// dest - результирующее изображение
// w - ширина изображения
// ratio - коэффициент пропорциональности
$w = 200; // ширина
$h = 200; // высота
// создаём исходное изображение на основе исходного файла и определяем его размеры
$w_src = imagesx($im); // вычисляем ширину
$h_src = imagesy($im); // вычисляем высоту изображения
// создаём пустую квадратную картинку
// важно именно truecolor!, иначе будем иметь 8-битный результат
$dest = imagecreatetruecolor($w,$h);
// вырезаем серединку по x, если фото горизонтальное
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $h, min($w_src,$h_src), min($w_src,$h_src));
// вырезаем квадратную верхушку по y,
// если фото вертикальное (хотя можно тоже серединку)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// квадратная картинка масштабируется без вырезок
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$date=time(); // вычисляем время в настоящий момент
imagejpeg($dest, $path_to_90_directory.$date.".jpg"); // сохраняем изображение формата jpg в нужную папку
// заносим в переменную путь до аватара
$avatar = $path_to_90_directory.$date.".jpg";
$delfull = $path_to_90_directory.$filename;
unlink ($delfull); // удаляем оригинал загруженного изображения
}
$size = $_FILES['fupload']['size']; // это размер в байтах делай с ним что надо
// например ссылку так можно сделать:
$link='http://'.$_SERVER['HTTP_HOST'].'/pics/'.$date.'.jpg';
Способ 2
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="images[]" multiple>
<button type="submit">Загрузить</button>
</form>
<?php
// File upload.php
// Если в $_FILES существует "images" и она не NULL
if (isset($_FILES['images'])) {
// Изменим структуру $_FILES
foreach($_FILES['images'] as $key => $value) {
foreach($value as $k => $v) {
$_FILES['images'][$k][$key] = $v;
}
// Удалим старые ключи
unset($_FILES['images'][$key]);
}
// Загружаем все картинки по порядку
foreach ($_FILES['images'] as $k => $v) {
// Загружаем по одному файлу
$fileName = $_FILES['images'][$k]['name'];
$fileTmpName = $_FILES['images'][$k]['tmp_name'];
$fileType = $_FILES['images'][$k]['type'];
$fileSize = $_FILES['images'][$k]['size'];
$errorCode = $_FILES['images'][$k]['error'];
// Проверим на ошибки
if ($errorCode !== UPLOAD_ERR_OK || !is_uploaded_file($fileTmpName)) {
// Массив с названиями ошибок
$errorMessages = [
UPLOAD_ERR_INI_SIZE => 'Размер файла превысил значение upload_max_filesize в конфигурации PHP.',
UPLOAD_ERR_FORM_SIZE => 'Размер загружаемого файла превысил значение MAX_FILE_SIZE в HTML-форме.',
UPLOAD_ERR_PARTIAL => 'Загружаемый файл был получен только частично.',
UPLOAD_ERR_NO_FILE => 'Файл не был загружен.',
UPLOAD_ERR_NO_TMP_DIR => 'Отсутствует временная папка.',
UPLOAD_ERR_CANT_WRITE => 'Не удалось записать файл на диск.',
UPLOAD_ERR_EXTENSION => 'PHP-расширение остановило загрузку файла.',
];
// Зададим неизвестную ошибку
$unknownMessage = 'При загрузке файла произошла неизвестная ошибка.';
// Если в массиве нет кода ошибки, скажем, что ошибка неизвестна
$outputMessage = isset($errorMessages[$errorCode]) ? $errorMessages[$errorCode] : $unknownMessage;
// Выведем название ошибки
die($outputMessage);
} else {
// Создадим ресурс FileInfo
$fi = finfo_open(FILEINFO_MIME_TYPE);
// Получим MIME-тип
$mime = (string) finfo_file($fi, $fileTmpName);
// Проверим ключевое слово image (image/jpeg, image/png и т. д.)
if (strpos($mime, 'image') === false) die('Можно загружать только изображения.');
// Результат функции запишем в переменную
$image = getimagesize($fileTmpName);
// Зададим ограничения для картинок
$limitBytes = 1024 * 1024 * 5;
$limitWidth = 1280;
$limitHeight = 768;
// Проверим нужные параметры
if (filesize($fileTmpName) > $limitBytes) die('Размер изображения не должен превышать 5 Мбайт.');
if ($image[1] > $limitHeight) die('Высота изображения не должна превышать 768 точек.');
if ($image[0] > $limitWidth) die('Ширина изображения не должна превышать 1280 точек.');
// Сгенерируем новое имя файла через функцию getRandomFileName()
$name = getRandomFileName($fileTmpName);
// Сгенерируем расширение файла на основе типа картинки
$extension = image_type_to_extension($image[2]);
// Сократим .jpeg до .jpg
$format = str_replace('jpeg', 'jpg', $extension);
// Переместим картинку с новым именем и расширением в папку /pics
if (!move_uploaded_file($fileTmpName, __DIR__ . '/upload/' . $name . $format)) {
die('При записи изображения на диск произошла ошибка.');
}
}
};
echo 'Файлы успешно загружены!';
};
// File functions.php
function getRandomFileName($path)
{
$path = $path ? $path . '/' : '';
do {
$name = md5(microtime() . rand(0, 9999));
$file = $path . $name;
} while (file_exists($file));
return $name;
}