Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2011, 23:46   #1
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию Функция imageUpload нужен совет..

PHP код:
function uploadImage($width 400$thumbWidth 75$savePath './content/images/'$thumbPath './content/thumbnail/'$maxFileSize 2048){
        
$text ='';
        
$ext = array('.jpeg','.jpg','.gif''.png''.tiff''.bmp');
        
$imgext strrchr(strtolower($_FILES['photo']['name']), ".");
        
$imgname strtolower($_FILES['photo']['name']);
        
$imgsize $_FILES['photo']['size'];
        
$imgtemp $_FILES['photo']['tmp_name'];
        
$imgType $_FILES['photo']['type'];
        
$newImgName "img_".time()."_full_1".$imgext;
        
$thumbName "img_".time()."_thumb_1".$imgext;
        if(
$imgname != ''){
                if(
$imgsize != && $imgsize <= ($maxFileSize 1024)){
                        if (!
in_array($imgext$ext)) {
                                
$text ="Не допустимый тип файла.";
                        }
                        elseif(!
getimagesize($imgtemp)){
                                
$text "Выбраное изображение не допустимо.";
                        }
                }else{
                        
$text "Размер фаила слишком большой.";
                }
        }
        if(!
$text){
                if(
is_uploaded_file($imgtemp)){
                        
move_uploaded_file($imgtemp$savePath.$newImgName);
        
//изменяем размер оригинальной картинки
                        
$imgname $savePath.$newImgName;
                        switch(
$imgType) {
                                case 
"image/gif"$im imagecreatefromgif($imgname); break;
                                case 
"image/jpeg"$im imagecreatefromjpeg($imgname); break;
                                case 
"image/png"$im imagecreatefrompng($imgname); break;
                                case 
"image/pjpeg"$im imagecreatefromjpeg($imgname); break;
                        }
                        list(
$w,$h) = getimagesize($imgname);
                        
$new_h=ceil($h/($w/$width));
                        
$im1 imagecreatetruecolor($width$new_h);
                        
imagecopyresampled($im1,$im,0,0,0,0,$width,$new_h,imagesx($im),imagesy($im));
                        
imageconvolution($im1, array( 
                        array(-
1,-1,-1),
                        array(-
1,16,-1),
                        array(-
1,-1,-1)
                        ), 
80);
                        
imagejpeg($im1$imgname100);
                        
imagedestroy($im);
                        
imagedestroy($im1);
//создаем превью
                        
$imgp $thumbPath.$thumbName;
                        
$newImg imagecreate(75 50);
                        
imagejpeg ($newImg$imgp);
                        
imagedestroy($newImg);
                        
$im imagecreatefromjpeg($imgname);
                        list(
$w,$h) = getimagesize($imgname);
                        
$new_h=ceil($h/($w/$thumbWidth));
                        
$im1 imagecreatetruecolor($thumbWidth$new_h);
                        
imagecopyresampled($im1,$im,0,0,0,0,$thumbWidth,$new_h,imagesx($im),imagesy($im));
                        
imageconvolution($im1, array( 
                        array(-
1,-1,-1),
                        array(-
1,16,-1),
                        array(-
1,-1,-1)
                        ), 
80);
                        
$imgname $thumbPath.$thumbName;
                        
imagejpeg($im1$imgname100);
                        
imagedestroy($im);
                        
imagedestroy($im1);
                        return 
null;
                }
        }else{
                return 
$text;
        }

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

Интересует вопрос оптимальна ли она? Сильно ли будет грузить сервер? Да и вообще можно ее оптимизировать? Или стоит ее поделить на три функции? Попробовал загрузить большую картинку получил сообщение о нехватке памяти..Посоветуйте. Спасибо.
snikers987 вне форума Ответить с цитированием
Старый 29.10.2011, 09:37   #2
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

В целом все хорошо, несколько мелочей нашел.
Тут strtolower можно убрать, избыточно.
Код:
$imgname = strtolower($_FILES['photo']['name']);
Эти строки я бы так написал, ИМХО удобней потом узать, в плане имен файлов
Код:
$newImgName = md5($imgtemp.time()).$imgext;
$thumbName = "thumb-".newImgName .$imgext;
И ресайз картинок я бы вынес отдельной функцией

По неххватке памяти, попробуйте прописать в .htaccess такую строчку php_value max_execution_time 3600
Gorychev вне форума Ответить с цитированием
Старый 29.10.2011, 15:52   #3
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Имена файлов так и сделаю)

По поводу памяти, время выполнения не поможет, хоть и не хочется придется делать ограничение на разрешение файла..
snikers987 вне форума Ответить с цитированием
Старый 29.10.2011, 17:23   #4
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

мне кажется вашу драгоценную память может активно кушать imageconvolution .. на вскидку по матрице не скажу какой вы там эффект пытаетесь получить, но нужен ли он?
Cronos20 вне форума Ответить с цитированием
Старый 29.10.2011, 18:54   #5
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Нет, дело не в imageconvolution() , закомментировал ее, но при загрузке файла 3648х2736 (10 Mpx) и весом 1.86 Мб получаю нехватку памяти..
snikers987 вне форума Ответить с цитированием
Старый 29.10.2011, 19:07   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

xdebug.ru
Andkorol вне форума Ответить с цитированием
Старый 29.10.2011, 21:54   #7
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Спасибо, памяти не хватает вот этому

PHP код:
$im imagecreatefromjpeg($imgname); 
snikers987 вне форума Ответить с цитированием
Старый 29.10.2011, 23:11   #8
snikers987
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 63
По умолчанию

Поделил на две функции, стало работать как надо.
snikers987 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен совет! carlike Фриланс 3 06.02.2011 21:32
Нужен совет, просто совет kardinal94 Общие вопросы Delphi 7 16.12.2010 22:16
Нужен совет... master13i Помощь студентам 1 08.11.2010 17:31
нужен совет миха18 Помощь студентам 3 01.06.2009 10:06
Нужен совет по С++ profi Помощь студентам 3 28.07.2008 19:20