Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/88: Рейтинг темы: голосов - 88, средняя оценка - 4.52
4 / 4 / 0
Регистрация: 23.11.2008
Сообщений: 44
1

Загрузка изображения с изменением имени, размера…

12.05.2011, 00:34. Показов 15762. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем! Мне нужно через форму загрузить фото (картину) на сервер, изменить размер, имя, объем файла и занести путь к файлу в БД.
Я в php новичок поэтому прошу помочь мне с данной задачкой. Может кто-то раньше такое делал скиньте пожалуйста свой код. Я вот нашёл в Инете по описанию подходящий мне код, но он не работает хотя и ошибок никаких не выдает.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
$db = mysql_connect ("localhost","root","");
mysql_select_db ("ijgallery",$db);
 
// подключаем файл соединения с базой
 
 
$valid_types =  array("gif","jpg", "png", "jpeg","GIF","JPG", "PNG", "JPEG");
 
// создаем главную рабочую директорию =============================================
 $dir=$_SERVER['DOCUMENT_ROOT']."/gallery/";
 if (!is_dir($dir)) {
 mkdir($dir,0755);
// создали папку gallery в корне нашего сайта и установили права на чтение и запись
 }
 
function createphoto ($input,$output) {
 $w = 400;  // мы получим  пропорциональное изображение шириной 400px
 $q = 100;  // качество jpeg по умолчанию
 
$f=$input;
 $src = imagecreatefromjpeg($f);
// функция imagecreatefromjpeg создает изображение JPEG из файла
 // т.е. создаём исходное изображение на основе исходного файла и определяем его размеры
 
$w_src = imagesx($src);
 $h_src= imagesy($src);
// получение ширины и высоты изображения в пикселях
 
$ratio = $w_src/$w;
 $w_dest = round($w_src/$ratio);
 $h_dest = round($h_src/$ratio);
// получение координат для построения нового изображения необходимой нам ширины
 
$dest = imagecreatetruecolor($w_dest,$h_dest);
// функция  imagecreatetruecolor пустое полноцветное изображение размерами x_size и y_size.
 // Созданное изображение имеет черный фон.
 
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
// Функция imagecopyresized копирует прямоугольные области с одного изображения на другое
 
// вывод картинки и очистка памяти
 imagejpeg($dest,$output,$q);
 imagedestroy($dest);
 imagedestroy($src);
 
}
 
if (isset($_POST['pr'])) {
// если нажата кнопка “добавить”, т.е. если форма с данными отправлена - начинаем работу
 
if ($_FILES['img']['tmp_name']!="") {
// первая проверка на наличие загружаемого файла
 
$ext = substr($_FILES['img']['name'], 1 + strrpos($_FILES['img']['name'], "."));
//получаем расширение загружаемого файла
 
if (in_array ($ext, $valid_types)) {
// сверяемся с массивом допустимых расширений и если совпадение найдено продолжаем работать
 // если нет - выводим сообщение об ошибке
 
$imageinfo = getimagesize($_FILES['img']['tmp_name']);
// получаем информацию о загруженном файле
 // функция getimagesize позволяет получить размер изображения в пикселях, а также mime-тип загруженного файла
 
if($imageinfo['mime'] == 'img/jpeg') {
// проверяем действительно ли загрузенный файл является рисунком, и если все правильно продолжаем работу
 // такая проверка необходима для того, чтобы не было скрытой загрузки вредоносного исполняемого файла
 // т.е. банальной смены расширения php на jpg и попытке загрузки его на сервер
$str="select max(id) from 'kartinu'";
 $sql=@mysql_query($str);
 $f=@mysql_fetch_array($sql);
 $maxnum=($f['max(id)']);
 $maxnum=($maxnum + 1);
// выбираем максимальное значение id с kartinu и увеличиваем его на единицу
 // это число и будет служить именем файла
 
$output=$maxnum.".".$ext;
// новое полное имя файла (добавили расширение к имени)
 
$input=$_FILES['img']['tmp_name'];
// временный файл который создается автоматически при загрузке изображения
 
createphoto($input,$dir.$output);
// вызов функции по работе с изображением.
 // передаем два параметра: имя исходного изображения и то, которое нужно получить
 
if (file_exists($dir.$output)) {
// проверка на существование загруженного файла
 echo "<p>файл загружен с именем {$output}</p>";
 $insert="INSERT INTO 'kartinu' ('image') VALUES ('".$output."');";
 $sql=mysql_query($insert);
//добавление в базу
 }
 else {
 echo "файл не был загружен";
 }
 
}
 else echo "<p>Неверный тип загружаемого файла</p>";
 }
 else echo "<p>Данное расширение недопустимо для загрузки</p>";
 }
 else echo "<p>Следует загрузить файл</p>";
 }
 
echo '<FORM METHOD="POST" ENCTYPE="multipart/form-data">';
 echo "<input type='file' class='file' name='img' size='100'> ";
 echo "<input type='submit' class='filebtn' name='pr' value='добавить'>";
 echo '</FORM>';
 ?>
этот пример я нашёл вот здесь
http://blog.vidyakin.ru/2460

Добавлено через 5 часов 39 минут
наверное где-то сделал ощыбку, все заработало
если кому надо вот робочий код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
$db = mysql_connect ("localhost","root","");
mysql_select_db ("pr",$db);
// подключаем файл соединения с базой
 
 
$valid_types =  array("gif","jpg", "png", "jpeg", "GIF", "JPG", "PNG", "JPEG");
 
// создаем главную рабочую директорию =============================================
 $dir=$_SERVER['DOCUMENT_ROOT']."/gallery/";
 if (!is_dir($dir)) {
 mkdir($dir,0755);
// создали папку gallery в корне нашего сайта и установили права на чтение и запись
 }
 
function createphoto ($input,$output) {
 $w = 400;  // мы получим  пропорциональное изображение шириной 400px
 $q = 100;  // качество jpeg по умолчанию
 
$f=$input;
 $src = imagecreatefromjpeg($f);
// функция imagecreatefromjpeg создает изображение JPEG из файла
 // т.е. создаём исходное изображение на основе исходного файла и определяем его размеры
 
$w_src = imagesx($src);
 $h_src= imagesy($src);
// получение ширины и высоты изображения в пикселях
 
$ratio = $w_src/$w;
 $w_dest = round($w_src/$ratio);
 $h_dest = round($h_src/$ratio);
// получение координат для построения нового изображения необходимой нам ширины
 
$dest = imagecreatetruecolor($w_dest,$h_dest);
// функция  imagecreatetruecolor пустое полноцветное изображение размерами x_size и y_size.
 // Созданное изображение имеет черный фон.
 
imagecopyresized($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
// Функция imagecopyresized копирует прямоугольные области с одного изображения на другое
 
// вывод картинки и очистка памяти
 imagejpeg($dest,$output,$q);
 imagedestroy($dest);
 imagedestroy($src);
 
}
 
if (isset($_POST['pr'])) {
// если нажата кнопка “добавить”, т.е. если форма с данными отправлена - начинаем работу
 
if ($_FILES['img']['tmp_name']!="") {
// первая проверка на наличие загружаемого файла
 
$ext = substr($_FILES['img']['name'], 1 + strrpos($_FILES['img']['name'], "."));
//получаем расширение загружаемого файла
 
if (in_array ($ext, $valid_types)) {
// сверяемся с массивом допустимых расширений и если совпадение найдено продолжаем работать
 // если нет - выводим сообщение об ошибке
 
$imageinfo = getimagesize($_FILES['img']['tmp_name']);
// получаем информацию о загруженном файле
 // функция getimagesize позволяет получить размер изображения в пикселях, а также mime-тип загруженного файла
 
if($imageinfo['mime'] == 'image/jpeg') {
// проверяем действительно ли загрузенный файл является рисунком, и если все правильно продолжаем работу
 // такая проверка необходима для того, чтобы не было скрытой загрузки вредоносного исполняемого файла
 // т.е. банальной смены расширения php на jpg и попытке загрузки его на сервер
 
$str="select max(id) from 'gallery_image'";
 $sql=@mysql_query($str);
 $f=@mysql_fetch_array($sql);
 $maxnum=($f['max(id)']);
 $maxnum=($maxnum + 1);
// выбираем максимальное значение id с gallery_image и увеличиваем его на единицу
 // это число и будет служить именем файла
 
$output=$maxnum.".".$ext;
// новое полное имя файла (добавили расширение к имени)
 
$input=$_FILES['img']['tmp_name'];
// временный файл который создается автоматически при загрузке изображения
 
createphoto($input,$dir.$output);
// вызов функции по работе с изображением.
 // передаем два параметра: имя исходного изображения и то, которое нужно получить
 
if (file_exists($dir.$output)) {
// проверка на существование загруженного файла
 echo "<p>файл загружен с именем {$output}</p>";
 $insert="INSERT INTO 'gallery_image' ('image') VALUES ('".$output."');";
 $sql=mysql_query($insert);
//добавление в базу
 }
 else {
 echo "файл не был загружен";
 }
 
}
 else echo "<p>Неверный тип загружаемого файла</p>";
 }
 else echo "<p>Данное расширение недопустимо для загрузки</p>";
 }
 else echo "<p>Следует загрузить файл</p>";
 }
 
echo '<FORM METHOD="POST" ENCTYPE="multipart/form-data">';
 echo "<input type='file' class='file' name='img' size='100'> ";
 echo "<input type='submit' class='filebtn' name='pr' value='добавить'>" ;
 echo '</FORM>';
 ?>
ну и таблица в бд

SQL
1
2
3
4
5
CREATE TABLE IF NOT EXISTS `gallery_image` (
 `id` INT(11) NOT NULL AUTO_INCREMENT,
 `image` VARCHAR(50) COLLATE cp1251_general_cs NOT NULL,
 PRIMARY KEY  (`id`)
 ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_general_cs;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2011, 00:34
Ответы с готовыми решениями:

Загрузка картинок с сжатием и конвертированием изображения + массовая загрузка
Приветствую форумчане Я можно сказать что новичок в PHP но сайты пишу уже давно, и столкнулся с...

Загрузка изображения (только изображения)
Нужно обычная форма через которую надо загружать изображение в папку load Вот что я пока что...

Работа с изменением размера изображения
Доброго времени суток. Есть анимированный блок с картинками (в виде страниц). При наведении на...

Загрузка изображения в PictureBox с автоматическим изменением разрешения
Есть OpenFileDialog, он открывает изображение и помещает его в PictureBox, а мне нужно чтобы после...

1
59 / 59 / 16
Регистрация: 14.06.2010
Сообщений: 1,190
Записей в блоге: 5
12.05.2011, 18:37 2
вот накатал, пробуй:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php 
$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;
                                           move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory 
                if(preg_match('/[.](GIF)|(gif)$/',    $filename)) {
                            $im    = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем    изображение в этом же формате 
                            }
                            if(preg_match('/[.](PNG)|(png)$/', $filename)) {
 
                            $im =    imagecreatefrompng($path_to_90_directory.$filename) ;//если    оригинал был в формате png, то создаем изображение в этом же формате 
                            }
                            
                            if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/',    $filename)) {
                                           $im =    imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате 
                            }
                            
            //СОЗДАНИЕ    КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru
//    Создание квадрата 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';
//юзай наздоровье
?>
1
12.05.2011, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2011, 18:37
Помогаю со студенческими работами здесь

Копирование таблицы в базе Access с изменением имени
Доброго времени суток, уважаемые форумчане! Очень наболел вопрос: Как при создании копии таблицы в...

Идея с изменением размера в Image
Я тут узнал, что Image поддерживает изменение размеров рисунка. Можт быть попробывать его...

Поиск картинок на странице с изменением их размера
Здравствуйте,форумчане! Подскажите пожалуйста как на js написать скрипт,который будет искать все...

Работа с Memo и изменением размера элемента
Поскажите какую функцию нужно обработать, и сам код.. Представьте: Есть форма, на ней поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru