Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: помогите доработать скрипт обработки изображений
 
 автор: burgui   (21.09.2010 в 13:09)   письмо автору
 
 

Доброго времени суток уважаемые знатоки программирования.
С помощью этого форума сделал загрузку графических файлов на сервер с изменением исходного размера. Все работает нормально, но не пойму как вставить имена полученных файлов в базу данных. Имена файлов и изменение размера изображения формируется здесь, как я понимаю :

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_img0000$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>");
   }    
?>

  Ответить  
 
 автор: sim5   (21.09.2010 в 13:29)   письмо автору
 
   для: burgui   (21.09.2010 в 13:09)
 

Копировать один к одному грешно, от этого и проблемы. ;-)
Тип файлов надо было еще до ресайза проверять, знали бы до него расширение, а имена известы, только их формирование нужно вынести из аргументов.

  Ответить  
 
 автор: burgui   (21.09.2010 в 13:45)   письмо автору
 
   для: sim5   (21.09.2010 в 13:29)
 

Спасибо уважаемый Sim5
Долго читал Ваш ответ, кажется понял. Чтоб упростить задачу, мне проверка расширений не важна, все файлы будут Jpeg, насчет известных файлов здесь я не понял. Как их вынести, то есть нужно разделить ресайз файлов и перенос их в конечную папку. Может подскажете, если не трудно как это реализовать программно, а то жаль, скрипт то что-то мне нужно, а доработать его не могу.

  Ответить  
 
 автор: sim5   (21.09.2010 в 14:24)   письмо автору
 
   для: burgui   (21.09.2010 в 13:45)
 

Ну это если исключительно вы сами будете загружать картинки, тогда можно сказать, что проверка расширения не важна, и все будет jpegом. Иначе это не обязательно будет jpeg, да и не обязательно картинка, а просто мусор.
Что не понятного в коде? Ну неуж-то не видно, что имя файла формируется в передаче аргумента:
resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);
и если вынести это, присваивая это действо некой переменной, плюс добавляя расширение, то вы будете знать имя файла, а аргументом передавать переменную.
А возможно и передача так как есть, в этом случае функция ресайза при удачном завершении работы будет возвращать имя файла как basename($dist), а в случае ошибки false, из чего будете принимать решение о записи имени файла в базу.

  Ответить  
 
 автор: burgui   (21.09.2010 в 14:44)   письмо автору
 
   для: 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); 

в результате, картинки копируются в папку, а в таблицу записи не добавляются. Помогите, как сделать правильно.

Спасибо

  Ответить  
 
 автор: sim5   (21.09.2010 в 14:54)   письмо автору
 
   для: burgui   (21.09.2010 в 14:44)
 

$sapis=resize($_FILES['file1']['tmp_name'], $path.'file1_'.date(time()), 30);

И что вы ждете? Функция resize() разве чего-то вам возвращает?

  Ответить  
 
 автор: burgui   (21.09.2010 в 15:00)   письмо автору
 
   для: sim5   (21.09.2010 в 14:54)
 

Я написал, что придумать что-то отличное от этого не смог. Поэтому и спрашиваю на Вашем форуме. Я думал в том направлении, что функция resize() меняет размер изображения, записывая результат в конечный файл. Как выявилось, я думал неправильно, и тут все мои соображения закончились, к сожалению и я зашел в тупик. Помогите пожалуйста с примером кода, как выцепить имя файла.

Спасибо

  Ответить  
 
 автор: sim5   (21.09.2010 в 15:20)   письмо автору
 
   для: burgui   (21.09.2010 в 15:00)
 

<?
$dist
$pr) { 
    
// добавить признак результата работы функции
    
$error false;
    
// продолжение кода
    //......  
    //создаем изображение в зависимости от расширения исходного 
    // коли только jpeg, то проще - убрать switch (в обеих случаях)
    
$src_img imagecreatefromjpeg($source); 
    
//ресайз 
    
imagecopyresampled($new_img$src_img0000$w$h$ws$hs); 
    
//сохраняем в файл по расширению и заданному имени   
    
$error imagejpeg($new_img$dist.'.jpg');           
    
$dist basename($dist);
    
// после высвобождения русурсов
    
return $error $dist $error;

Вот в этом случае при обращении к функции она будет возвращать имя файла, если ресайз произошел успешно.

  Ответить  
 
 автор: burgui   (21.09.2010 в 15:31)   письмо автору
 
   для: 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. А если меняется размер двух файлов, что-то я не понял. Если не трудно Вы не можете привести весь скрипт полностью. Извиняюсь за тупость и назойливость.

Спасибо

  Ответить  
 
 автор: sim5   (21.09.2010 в 16:03)   письмо автору
 
   для: burgui   (21.09.2010 в 15:31)
 

Вы выведите на экран $dist в самом начале функции, и в конце, когда она возвращается из функции, и не будет вопросов, что что она содержит. А функция у вас вызывается дважды, а это значит что?

  Ответить  
 
 автор: burgui   (21.09.2010 в 16:07)   письмо автору
 
   для: sim5   (21.09.2010 в 16:03)
 

Спасибо за ответ.

  Ответить  
 
 автор: burgui   (23.09.2010 в 13:18)   письмо автору
 
   для: burgui   (21.09.2010 в 16:07)
 

Уважаемый Sim5. Вставил в коде echo $dist;, в результате просто выводится file1_1285211101file2_1285211102. Что делать с этими строками в массиве ума не приложу. Как их разделить и засунуть в две переменные просто не знаю. Подскажите что далее делать.

Спасибо

  Ответить  
 
 автор: sim5   (23.09.2010 в 13:28)   письмо автору
 
   для: burgui   (23.09.2010 в 13:18)
 

Здрасте, приехали. А кто говорил, что нет проблем ибо только jpeg файлы будут? Ну неужто нелья посмотреть, что в функции расширение добавляется при записи файла на диск и переменная $dist в аргументе функции его не содержит? А глянули бы, подумали, и добавили бы там, где я забыл:
$dist = basename($dist).'.jpg'

  Ответить  
 
 автор: burgui   (23.09.2010 в 13:36)   письмо автору
 
   для: sim5   (23.09.2010 в 13:28)
 

Да у меня проблема не в расширение файла, как его добавить я уже сам докумекал. А вот что делать с массивом в котором лежат
file1_1285211101.jpgfile2_1285211102.jpg
. Как его разобрать и засунуть в две переменные. Вот в чем вопрос? Перепробовал все возможные варианты.

спасибо

  Ответить  
 
 автор: sim5   (23.09.2010 в 13:45)   письмо автору
 
   для: burgui   (23.09.2010 в 13:36)
 

Каким массивом? От куда он у вас взялся? Вы загружаете все два фото, $file1 = вызов функции ресайза, $file2 = вызов функции ресайза, все, получили свои имена, вставляйте их в базу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования