"Оптимизиране" на форма - идеи?

Ticketa

Registered
Привет,
имам един код , който не ми харесва как съм го структурирал и търся някакъв вид "оптимизация".

Също така към момента когато папката със снимки надвиши 500бр. снимки се създава нова images1, images2, images3 , искам това images вече да бъде: година/месец/

Като самия месец ако е с повече от 500 снимки , да създава втора папка година/месец-1 , година/месец-2

(обмислям да го направя по следния начин)
Код:
$year_folder = $path . date("Y");
$month_folder = $year_folder . '/' . date("m");

!file_exists($year_folder) && mkdir($year_folder , 0777);
!file_exists($month_folder) && mkdir($month_folder, 0777);


2019/31/
2019/31-1/
2020/01/
2020/01-1/
2020/01-2/
2020/01-3/

Тъй като се прави бекъп на цялото нещо и е по-лесно за поддръжка и като MB архива.


Код:
            if (empty($title) AND empty($description)) {
                Session::add('feedback_negative', 'Не сте попълнили задължителните полета.');
            } else {
            $prebroi = '';
            $sqlX = ".................";
            $InsertQueryListing = $database->prepare($sqlX);
            $InsertQueryListing->execute(array('............'));
            
            $LAST_ID = $database->lastInsertId();
            
            
        //  if ($InsertQueryListing->rowCount() == 1) {
            //създаваме функция, за преброяване на снимките, след което задаваме максимален,
            //брой на снимките (500), ако снимките надвишават 500 създаваме нова папка images1 и т.н.
            //$path = //главна директория на снимките
            $exclude = array('.', '..', '.htaccess', 'def_big.jpg'); 
            $max_files = 500;
            $uploaded_dir = 'images0/'; //под директория на снимката
            chdir(Config::get('PATH_LISTING'));
            $dirs = glob("images*", GLOB_ONLYDIR); 
            $dirs = array_diff($dirs, $exclude);
            $count_dirs = count($dirs);
            for($i = 1; $i <= $count_dirs; $i++) {
            	$current_folder = scandir($dirs[$i-1]);
            	$current_folder = array_diff($current_folder, $exclude);
            	$count_files = count($current_folder);
            	if($count_files >= $max_files and $count_dirs <= $i) {
            		mkdir("images{$i}", 0777, true);
            		$uploaded_dir = 'images'.$i.'/';
            	} else if($count_files < $max_files) {
            		$uploaded_dir = 'images'.--$i.'/';
            		break;
            	} else {
            		$ii = $i-1;
            		$uploaded_dir = 'images'.$ii.'/';
            	}
            }
            //край на функцията
            if (!is_dir("$uploaded_dir") AND !is_writable("$uploaded_dir")) {
            	Session::add('feedback_negative', 'В момента папката за качване на снимки не е с нужните правомощия и не можете да качвате снимки.');
            } else {
            	for ($i = 0; $i <= 5; $i++){
            		if (!is_uploaded_file($_FILES['pic']['tmp_name'][''.$i.''])) {
            			//echo "Файла {$i} не е избран.<br />";
            		} else {
            			$name_pic = $_FILES['pic']['name'][''.$i.''];
            			$ext   = strtolower(substr(strrchr($name_pic, "."), 1));
            			$allow = array("jpg", "jpeg", "JPG", "JPEG", "png"); //разрешени формати
            			$mimetypes = mime_content_type($_FILES['pic']['tmp_name'][''.$i.'']); //взимаме mime типа на снимката
            			$type = $_FILES['pic']['type'][''.$i.'']; //взимаме типа на снимката
            			$razmer_max_fail = Config::get('LISTING_IMAGE_SIZE')*1024; //максималния размер на файла /максималният размер на файл (в KB)/
            			if (in_array($ext, $allow)){ //проверка на разширението
            				if (($mimetypes =='image/jpeg' || $mimetypes =='image/x-png' || $mimetypes =='image/pjpeg' || $mimetypes =='image/jpg' || $mimetypes =='image/png')) {//проверка ,чрез mime тип-а
            					if (($type == "image/jpeg") || ($type == "image/pjpeg") ||  ($type == "image/jpg") || ($type == "image/png") || ($type == "image/x-png")) {
            						if ($_FILES['pic']['error'][''.$i.''] > 0){
            							Session::add('feedback_negative', 'ГРЕШКА: Възникна грешка при обработката на файла(снимката). Снимката не беше качена!');
            						} else {
            							if ($_FILES['pic']['size'][''.$i.''] <= $razmer_max_fail) {
            								//генерираме уникално име на снимката
            								$datename = date("YmdHis");
            								$rand = rand(0,1000);
            								$md5 = md5("$i$datename$rand");
            								$new_file_name = $i."_pic_$md5.$ext";
            								$new_file_name222 = $i."_pic_$md5";
            								//край на генерирането
            								//@${prebroi.$i} = "{$uploaded_dir}{$new_file_name}";
            								@${prebroi.$i} = "{$new_file_name222}";
            								list($width, $height) = getimagesize($_FILES['pic']['tmp_name'][''.$i.'']);
                                            
            								//NEW QUERY IS HEAR
                                            $ImgQuery = $database->prepare("INSERT INTO `table_imgs` (art_id, relativepath, name, original_name, created_at, extension) VALUES (:art_id, :relativepath, :name, :original_name, :created_at, :extension)");
                                            $ImgQuery->execute(array(
                                                ':art_id' => $LAST_ID,
                                                ':relativepath' => $uploaded_dir,
                                                ':name' => $new_file_name222,
                                                ':original_name' => $name_pic,
                                                ':created_at' => $now,
                                                ':extension' => $ext
                                            ));
            								if(($width < Config::get('LISTING_WIDTH_SIZE')) AND ($height < Config::get('LISTING_HEIGHT_SIZE'))) {
            									move_uploaded_file($_FILES['pic']['tmp_name'][''.$i.''], $uploaded_dir.$new_file_name);
            								} else if($width >= Config::get('LISTING_WIDTH_SIZE')){
            									$new_width = Config::get('LISTING_WIDTH_SIZE');
            									$new_height = (int)($height*$new_width)/$width;
            
            									if($type == "image/pjpeg" OR $type == "image/jpeg"){
            										$imagecreatefrom = "imagecreatefromjpeg";
            									} elseif($type == "image/x-png" OR $type == "image/png"){
            										$imagecreatefrom = "imagecreatefrompng";
            									}
            									$image_p = imagecreatetruecolor($new_width, $new_height);
            									$image = $imagecreatefrom($_FILES['pic']['tmp_name'][''.$i.'']);
            
            									imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            									imagejpeg($image_p, $uploaded_dir.$new_file_name, 100);
            								} else if($height >= Config::get('LISTING_HEIGHT_SIZE')) {
            									$new_height= Config::get('LISTING_HEIGHT_SIZE');
            									$new_width= (int) ($width*$new_height)/$height;
            
            									if($type == "image/pjpeg" OR $type == "image/jpeg"){
            										$imagecreatefrom = "imagecreatefromjpeg";
            									} else if($type == "image/x-png" OR $type == "image/png"){
            										$imagecreatefrom = "imagecreatefrompng";
            									}
            									$image_p = imagecreatetruecolor($new_width, $new_height);
            									$image = $imagecreatefrom($_FILES['pic']['tmp_name'][''.$i.'']);
            
            									imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
            									imagejpeg($image_p, $uploaded_dir.$new_file_name, 100);
            								}
            							} else {
            								Session::add('feedback_negative', "ГРЕШКА: Файл <b>{$i}</b> не беше качен. Размера е по-голям от допустимият!");
            							}
            						}
            					} else {
            						Session::add('feedback_negative', "ГРЕШКА: Файлът {$i} не е валиден формат, разрешени: jpeg, jpg, png");
            					}
            				} else {
            					Session::add('feedback_negative', "ГРЕШКА: Файлът {$i} не е валиден формат, разрешени: jpeg, jpg, png");
            				}
            			} else {
            				Session::add('feedback_negative', "ГРЕШКА: Файлът {$i} не е валиден формат, разрешени: jpeg, jpg, png");
            			}
            		}
            	}
				if(@$prebroi0 == "") { $prebroi0 = ""; }
				if(@$prebroi1 == "") { $prebroi1 = ""; }
				if(@$prebroi2 == "") { $prebroi2 = ""; }
				if(@$prebroi3 == "") { $prebroi3 = ""; }
				if(@$prebroi4 == "") { $prebroi4 = ""; }
				if(@$prebroi5 == "") { $prebroi5 = ""; }
                $req = $database->prepare( "UPDATE `table_article` SET img1=:img1, img2=:img2, img3=:img3, img4=:img4, img5=:img5, img6=:img6 WHERE `id`= :last_id" );
                $req->execute(array(':img1' => $prebroi0,':img2' => $prebroi1,':img3' => $prebroi2,
                ':img4' => $prebroi3, ':img5' => $prebroi4,':img6' => $prebroi5,':last_id' => $LAST_ID));
                
                //$req->debugDumpParams();
                Redirect::back()
            }
        //  }
            }
        }
 
Offtopic:

Кода ти има нужда от clean code principles. Трудно се чете и следи какво се случва.

D5tgy4cWsAMk3kf.png
 
Код:
UPDATE `table_article` SET img1=:img1, img2=:img2, img3=:img3, img4=:img4, img5=:img5, img6=:img6 WHERE `id`= :last_id
И базата, не само кода.
И най-вече се огледай за някоя библиотека за ъплоад + ресайз на снимките.
 
Ticketa каза:
[Какво би предложил @uphero?]

От какви съображения си направил шест еднотипни колони в тази таблица, част от които е възможно да не използваш, вместо да имаш таблица, в която това да са редове (и да не 'хабиш' празно място/да не се ограничаваш с 6)?

uphero според мен имаше предвид това, но вероятно имаш някаква причина да го правиш по този начин, щом си избрал [на пръв поглед] по-тромавия.
 
Иначе такъв масивен код се оправя, като започнеш да "разплиташ" логиката, изкарвайки отделни парчета код в добре именувани функции (без странични ефекти (echo/print/DB) по възможност :D), така че да го разбиеш на достатъчно малки части и главният скрипт да представлява само няколко извиквания на функции.

Евентуално ако срещнеш нужда по пътя може да си направиш и някой (малък!) клас, с който да олекотиш допълнително кода, но това ще си проличи като го поразбиеш малко.

Сега е просто твърде слонско, за да може човек да каже каквото и да е :D. Опитай да го разделиш на части доколкото можеш, и ъпдейтни да видим как е станало :D.
 
Най-явното, което ми се набива на очи и най-лесно се разчита е:

Код:
if(@$prebroi0 == "") { $prebroi0 = ""; }
if(@$prebroi1 == "") { $prebroi1 = ""; }
if(@$prebroi2 == "") { $prebroi2 = ""; }
if(@$prebroi3 == "") { $prebroi3 = ""; }
if(@$prebroi4 == "") { $prebroi4 = ""; }
if(@$prebroi5 == "") { $prebroi5 = ""; }

Защо, ако променливата е вече празен низ, я сетваш наново?
 
Късно видях че това е ларавел.
Мисля че има предостатъчно информация и примери, просто прави нещата бай ларавел.

Относно файловете винаги съм бил привърженик на галерия като в WordPress - файловете не са директно обвързани със съдържанието и могат лесно да се ползват на различни места.

Точно за ларавел има няколко много добри файл мениджъра.
 
Нищо общо с Laravel :hand:

@anonimen, кода за ъплоунд е много стар и е писан от потребителите на туриста.

https://web-tourist.net/forum/viewtopic.php?f=6&t=113125&hilit=prebroi0

Edit: иначе идеята е да могат да се качват максимално 6 снимки.
 
Защо използваш нещо толкова остаряло? Както @uphero казва - има предостатъчно читаво-написани библиотеки вече, които ще ти спестят всичко това и даже ще си свършат работата много по-добре.

Уроците в туриста са морално остарели и са за архива. Нищо тука не е обновявано от праисторията.
 

Горе