|
|
|
| Доброго времени суток уважаемые знатоки программирования.
С помощью этого форума сделал загрузку графических файлов на сервер с изменением исходного размера. Все работает нормально, но не пойму как вставить имена полученных файлов в базу данных. Имена файлов и изменение размера изображения формируется здесь, как я понимаю :
resize($_FILES['file2']['tmp_name'], $path.'file2_'.date(time()), 30);
|
как выцепить генерируемое имя и вставить его в базу, не пойму. Помогите пожалуйста советом.
Спасибо за ответы
<?php
$host="localhost";
$user="root";
$passw="";
$dbase="proba";
$table="kart";
/*зєднання з БД*/
$db=mysql_connect($host,$user,$passw) or die ("<font color='red'>Неможливо встановити з'єднання з базою даних. Зверніться до адміністратора.</font>");
/*вибір БД*/
mysql_select_db($dbase) or die ("<font color='red'>База даних зараз недоступна. Зверніться до адміністратора.</font>");
$file1=$_POST['file1'];
$file2=$_POST['file2'];
function resize($source, $dist, $pr) {
// получим размеры исходного изображения
$size_img = getimagesize($source);
$ws = $size_img[0]; //ширина
$hs = $size_img[1]; //высота
//получаем уменьшенные размеры выходного изображения
$w = round(($ws * $pr)/100); //ширина
$h = round(($hs * $pr)/100); //высота
//создаем изображение по заданным размерам
$new_img = imagecreatetruecolor($w, $h);
//создаем изображение в зависимости от расширения исходного
switch ($size_img['mime']) {
case 'image/jpeg':
$src_img = imagecreatefromjpeg($source);
break;
case 'image/png':
$src_img = imagecreatefrompng($source);
break;
case 'image/gif':
$src_img = imagecreatefromgif($source);
}
//ресайз
imagecopyresampled($new_img, $src_img, 0, 0, 0, 0, $w, $h, $ws, $hs);
//сохраняем в файл по расширению и заданному имени
switch ($size_img['mime']) {
case 'image/jpeg':
imagejpeg($new_img, $dist.'.jpg');
break;
case 'image/png':
imagepng($new_img, $dist.'.png');
break;
case 'image/gif':
imagegif($new_img, $dist.'.gif');
}
imagedestroy($new_img);
imagedestroy($src_img);
}
//указываем путь сохранения файлов
$path = 'temp/images/';
if (is_uploaded_file($_FILES['file1']['tmp_name'])) {
//проверяем загружаемое изображение на доступность размера,
//расширения, и если все ОК, делаем ресайз,
//передавая в функцию изображение из папки /tmp,
//путь и имя файла для сохранения, процент уменьшения.
resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
//здесь же сохраняем загруженное исходное изображение
} else {echo "Eror. Upload file1."}
exit ();//ошибка загрузки изображения
if (is_uploaded_file($_FILES['file2']['tmp_name'])) {
//проверяем загружаемое изображение на доступность размера,
//расширения, и если все ОК, делаем ресайз,
//передавая в функцию изображение из папки /tmp,
//путь и имя файла для сохранения, процент уменьшения.
resize($_FILES['file2']['tmp_name'], $path.'file2_'.date(time()), 30);
//здесь же сохраняем загруженное исходное изображение
} else {echo "Eror. Upload file2."}
exit ();//ошибка загрузки изображения
// Здесь вставка в базу. Как вставить, как получить имя файла
$sap="insert into kart1 (file1,file2) values ('???')";
$query = mysql_query($sap);
if($query) { echo 'Ok <br>'; }
else {
echo("Error <br>");
} ?>
|
| |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 13:09)
| | Копировать один к одному грешно, от этого и проблемы. ;-)
Тип файлов надо было еще до ресайза проверять, знали бы до него расширение, а имена известы, только их формирование нужно вынести из аргументов. | |
|
|
|
|
|
|
|
для: sim5
(21.09.2010 в 13:29)
| | Спасибо уважаемый Sim5
Долго читал Ваш ответ, кажется понял. Чтоб упростить задачу, мне проверка расширений не важна, все файлы будут Jpeg, насчет известных файлов здесь я не понял. Как их вынести, то есть нужно разделить ресайз файлов и перенос их в конечную папку. Может подскажете, если не трудно как это реализовать программно, а то жаль, скрипт то что-то мне нужно, а доработать его не могу. | |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 13:45)
| | Ну это если исключительно вы сами будете загружать картинки, тогда можно сказать, что проверка расширения не важна, и все будет jpegом. Иначе это не обязательно будет jpeg, да и не обязательно картинка, а просто мусор.
Что не понятного в коде? Ну неуж-то не видно, что имя файла формируется в передаче аргумента:
resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
| и если вынести это, присваивая это действо некой переменной, плюс добавляя расширение, то вы будете знать имя файла, а аргументом передавать переменную.
А возможно и передача так как есть, в этом случае функция ресайза при удачном завершении работы будет возвращать имя файла как basename($dist), а в случае ошибки false, из чего будете принимать решение о записи имени файла в базу. | |
|
|
|
|
|
|
|
для: sim5
(21.09.2010 в 14:24)
| | >Ну это если исключительно вы сами будете загружать картинки, тогда можно сказать, что проверка расширения не важна, и все будет jpegом.
Да загружать картинки буду только я, и насчет что это точно будут картинки, а не файлы с расширениям графических файлов это я знаю точно.
>Что не понятного в коде? Ну неуж-то не видно, что имя файла формируется в передаче аргумента:
Я вижу где формируется название файла. Я делал так:
$sapis=resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
|
и дальше в запросе вставлял $sapis в базу,
$sap="insert into kart1 (file1) values ('$sapis1')";
$query = mysql_query($sap);
|
в результате, картинки копируются в папку, а в таблицу записи не добавляются. Помогите, как сделать правильно.
Спасибо | |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 14:44)
| | $sapis=resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
И что вы ждете? Функция resize() разве чего-то вам возвращает? | |
|
|
|
|
|
|
|
для: sim5
(21.09.2010 в 14:54)
| | Я написал, что придумать что-то отличное от этого не смог. Поэтому и спрашиваю на Вашем форуме. Я думал в том направлении, что функция resize() меняет размер изображения, записывая результат в конечный файл. Как выявилось, я думал неправильно, и тут все мои соображения закончились, к сожалению и я зашел в тупик. Помогите пожалуйста с примером кода, как выцепить имя файла.
Спасибо | |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 15:00)
| |
<?
$dist, $pr) {
// добавить признак результата работы функции
$error = false;
// продолжение кода
//......
//создаем изображение в зависимости от расширения исходного
// коли только jpeg, то проще - убрать switch (в обеих случаях)
$src_img = imagecreatefromjpeg($source);
//ресайз
imagecopyresampled($new_img, $src_img, 0, 0, 0, 0, $w, $h, $ws, $hs);
//сохраняем в файл по расширению и заданному имени
$error = imagejpeg($new_img, $dist.'.jpg');
$dist = basename($dist);
// после высвобождения русурсов
return $error ? $dist : $error;
|
Вот в этом случае при обращении к функции она будет возвращать имя файла, если ресайз произошел успешно. | |
|
|
|
|
|
|
|
для: sim5
(21.09.2010 в 15:20)
| | Уважаемый Sim5 спасибо за проделанную работу. Я изменил код согласно Вашим инструкциям, вот что получилось
function resize($source, $dist, $pr) {
// добавить признак результата работы функции
$error = false;
// получим размеры исходного изображения
$size_img = getimagesize($source);
$ws = $size_img[0]; //ширина
$hs = $size_img[1]; //высота
//получаем уменьшенные размеры выходного изображения
$w = round(($ws * $pr)/100); //ширина
$h = round(($hs * $pr)/100); //высота
//создаем изображение по заданным размерам
$new_img = imagecreatetruecolor($w, $h);
//создаем изображение в зависимости от расширения исходного
switch ($size_img['mime']) {
case 'image/jpeg':
$src_img = imagecreatefromjpeg($source);
break;
case 'image/png':
$src_img = imagecreatefrompng($source);
break;
case 'image/gif':
$src_img = imagecreatefromgif($source);
}
//ресайз
imagecopyresampled($new_img, $src_img, 0, 0, 0, 0, $w, $h, $ws, $hs);
//сохраняем в файл по расширению и заданному имени
$error = imagejpeg($new_img, $dist.'.jpg');
$dist = basename($dist);
imagedestroy($new_img);
imagedestroy($src_img);
} // после высвобождения русурсов
return $error ? $dist : $error;
//указываем путь сохранения файлов
$path = 'temp/images/';
if (is_uploaded_file($_FILES['file1']['tmp_name'])) {
//проверяем загружаемое изображение на доступность размера,
//расширения, и если все ОК, делаем ресайз,
//передавая в функцию изображение из папки /tmp,
//путь и имя файла для сохранения, процент уменьшения.
resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
//здесь же сохраняем загруженное исходное изображение
} else {echo "Eror. Upload file1."}
exit ();//ошибка загрузки изображения
if (is_uploaded_file($_FILES['file2']['tmp_name'])) {
//проверяем загружаемое изображение на доступность размера,
//расширения, и если все ОК, делаем ресайз,
//передавая в функцию изображение из папки /tmp,
//путь и имя файла для сохранения, процент уменьшения.
resize($_FILES['file2']['tmp_name'], $path.'file2_'.date(time()), 30);
//здесь же сохраняем загруженное исходное изображение
} else {echo "Eror. Upload file2."}
exit ();//ошибка загрузки изображения
// Здесь вставка в базу. Как вставить, как получить имя файла
$sap="insert into kart1 (file1,file2) values ('???')";
$query = mysql_query($sap);
if($query) { echo 'Ok <br>'; }
else {
echo("Error <br>");
} ?>
|
Как я понял имя файла идет в $dist. А если меняется размер двух файлов, что-то я не понял. Если не трудно Вы не можете привести весь скрипт полностью. Извиняюсь за тупость и назойливость.
Спасибо | |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 15:31)
| | Вы выведите на экран $dist в самом начале функции, и в конце, когда она возвращается из функции, и не будет вопросов, что что она содержит. А функция у вас вызывается дважды, а это значит что? | |
|
|
|
|
|
|
|
для: sim5
(21.09.2010 в 16:03)
| | Спасибо за ответ. | |
|
|
|
|
|
|
|
для: burgui
(21.09.2010 в 16:07)
| | Уважаемый Sim5. Вставил в коде echo $dist;, в результате просто выводится file1_1285211101file2_1285211102. Что делать с этими строками в массиве ума не приложу. Как их разделить и засунуть в две переменные просто не знаю. Подскажите что далее делать.
Спасибо | |
|
|
|
|
|
|
|
для: burgui
(23.09.2010 в 13:18)
| | Здрасте, приехали. А кто говорил, что нет проблем ибо только jpeg файлы будут? Ну неужто нелья посмотреть, что в функции расширение добавляется при записи файла на диск и переменная $dist в аргументе функции его не содержит? А глянули бы, подумали, и добавили бы там, где я забыл:
$dist = basename($dist).'.jpg'
|
| |
|
|
|
|
|
|
|
для: sim5
(23.09.2010 в 13:28)
| | Да у меня проблема не в расширение файла, как его добавить я уже сам докумекал. А вот что делать с массивом в котором лежат
file1_1285211101.jpgfile2_1285211102.jpg
| . Как его разобрать и засунуть в две переменные. Вот в чем вопрос? Перепробовал все возможные варианты.
спасибо | |
|
|
|
|
|
|
|
для: burgui
(23.09.2010 в 13:36)
| | Каким массивом? От куда он у вас взялся? Вы загружаете все два фото, $file1 = вызов функции ресайза, $file2 = вызов функции ресайза, все, получили свои имена, вставляйте их в базу. | |
|
|
|
|