Я использую этот код
Тут еще пример как в базу-данных пути сохранять
$id - например id товара или галлереи
if($_FILES['photos']['name'][0]){
for($i = 0; $i < count($_FILES['photos']['name']); $i++){
$error = "";
if($_FILES['photos']['name'][$i]){
// если есть файл
$galleryimgExt = strtolower(preg_replace("#.+\.([a-z]+)$#i", "$1", $_FILES['photos']['name'][$i])); // расширение картинки
$galleryimgName = "{$id}_{$i}.{$galleryimgExt}"; // новое имя картинки
$galleryimgTmpName = $_FILES['photos']['tmp_name'][$i]; // временное имя файла
$galleryimgSize = $_FILES['photos']['size'][$i]; // вес файла
$galleryimgType = $_FILES['photos']['type'][$i]; // тип файла
$galleryimgError = $_FILES['photos']['error'][$i]; // 0 - OK, иначе - ошибка
if(!in_array($galleryimgType, $types)){
$error .= "Допустимые расширения - .gif, .jpg, .png <br />";
$_SESSION['answer'] .= "<div class='error'>Ошибка при загрузке картинки {$_FILES['photos']['name'][$i]} <br /> {$error}</div>";
continue;
}
if($galleryimgSize > SIZE){
$error .= "Максимальный вес файла - 1 Мб";
$_SESSION['answer'] .= "<div class='error'>Ошибка при загрузке картинки {$_FILES['photos']['name'][$i]} <br /> {$error}</div>";
continue;
}
if($galleryimgError){
$error .= "Ошибка при загрузке файла. Возможно, файл слишком большой";
$_SESSION['answer'] .= "<div class='error'>Ошибка при загрузке картинки {$_FILES['photos']['name'][$i]} <br /> {$error}</div>";
continue;
}
// если нет ошибок
if(empty($error)){
if(@move_uploaded_file($galleryimgTmpName, "userfiles/gal/img/$galleryimgName")){
resize("userfiles/gal/img/$galleryimgName", "userfiles/gal/mini_img/$galleryimgName", 150, 150, $galleryimgExt);
resize("userfiles/gal/img/$galleryimgName", "userfiles/gal/tmp/$galleryimgName", 1000, 1000, $galleryimgExt);
@unlink("userfiles/gal/img/$galleryimgExt");
if(!isset($galleryfiles)){
$galleryfiles = $galleryimgName;
}else{
$galleryfiles .= "|{$galleryimgName}";
}
}else{
$_SESSION['answer'] .= "<div class='error'>Не удалось переместить загруженную картинку. Проверьте права на папки в каталоге /userfiles/product_img/</div>";
}
}
}
}//конец цикла
if(isset($galleryfiles)){
mysql_query("UPDATE otziv SET img = '$galleryfiles' WHERE otziv_id = $id");
}
}
еще добавляю resize картинок
/* ===Ресайз картинок=== */
function resize($target, $dest, $wmax, $hmax, $ext){
/*
$target - путь к оригинальному файлу
$dest - путь сохранения обработанного файла
$wmax - максимальная ширина
$hmax - максимальная высота
$ext - расширение файла
*/
list($w_orig, $h_orig) = getimagesize($target);
$ratio = $w_orig / $h_orig; // =1 - квадрат, <1 - альбомная, >1 - книжная
if(($wmax / $hmax) > $ratio){
$wmax = $hmax * $ratio;
}else{
$hmax = $wmax / $ratio;
}
$img = "";
// imagecreatefromjpeg | imagecreatefromgif | imagecreatefrompng
switch($ext){
case("gif"):
$img = imagecreatefromgif($target);
break;
case("png"):
$img = imagecreatefrompng($target);
break;
default:
$img = imagecreatefromjpeg($target);
}
$newImg = imagecreatetruecolor($wmax, $hmax); // создаем оболочку для новой картинки
if($ext == "png"){
imagesavealpha($newImg, true); // сохранение альфа канала
$transPng = imagecolorallocatealpha($newImg,0,0,0,127); // добавляем прозрачность
imagefill($newImg, 0, 0, $transPng); // заливка
}
imagecopyresampled($newImg, $img, 0, 0, 0, 0, $wmax, $hmax, $w_orig, $h_orig); // копируем и ресайзим изображение
switch($ext){
case("gif"):
imagegif($newImg, $dest);
break;
case("png"):
imagepng($newImg, $dest);
break;
default:
imagejpeg($newImg, $dest);
}
imagedestroy($newImg);
}
ну и html
<input type="file" name="photos" multiple>