Прикачване на изображения

chepa

Registered
Здравейте, трябва ми форма за прикачване на изображения, която да не е нищо сложно. Искам да проверява за типа на файла, големината и да е възможно най - защитена по възможност.
 
В такива случаи обикновено можеш да си намериш някой туториал в google, например този - http://mobile.htmlgoodies.com/beyond/php/article.php/3877766/Web-Developer-How-To-Upload-Images-Using-PHP.htm

Отдолу има линкове към документацията, тях също може да погледнеш :?:

Най-съществената част тази, където проверяваш дали каченият файл е изображение.
 
Намерих тази, но не съм сигурен дали е достатъчно защитена, вие как мислите ? Има проверка за типа и големината на файла мисля, че друго не и трябва?

Код:
 /**************
				   
				   UPLOAD FORM
				   
				   ***************/
				   //51200 bytes = 50KB 
						$size_bytes = 151200; //Максималната големина на файла 
						$extlimit = "yes"; //Ако искате да има лимит при файловете написете "yes" , а ако не искате напишете "no" 
						$limitedext = array(".jpg",".png",".jpeg"); //Разрешени файлове за качванеe , 

						$file_name = $_FILES['ufile']['name']; 
						// Името на файла, който вие качвате 
						$file_tmp = $_FILES['ufile']['tmp_name']; 
						$file_size = $_FILES['ufile']['size']; 

						//Проверява дали големината на файла съвпада с допустимата 
						if ($file_size > $size_bytes){ 
						echo "<center><div class='error'>Файла надвишава допyстимите размери - <b>". $size_bytes / 1024 ."</b> KB.</div></center>"; 
						} 
						//Далй файла е от допустимите 
						$ext = strrchr($file_name,'.'); 
						if (($extlimit == "yes") && (!in_array(strtolower($ext),$limitedext))) { 
						echo("<center><div class='error'>Недопyстим тип на файла.</div></center>"); 
						exit(); 
						} 


						// Произволно 4 цифрено число, което ще е пред името на самия файл, който вие качвате 
						$random_digit=rand(0000,9999); 

						//Използвайте "точка (.)" ако искате да прибавите други неща при преименуването на файла, освен 4те произволни цифри 

						$new_file_name=$random_digit.$file_name; 

						//$new_file_name = новото име на качения файл 
						//Ако качим файл с име : cartoon.gif той ще се запише в папката upload/ 
						//$path= "upload/".$new_file_name; може да си го промените - $path= "желаната от вас папка/".$new_file_name; 
						$path= "upload/".$new_file_name; 
						if(!isset($ufile)) 
						{ 
						if(copy($_FILES['ufile']['tmp_name'], $path)) 
						{ 
						//$new_file_name = новото име на файла 
						//$HTTP_POST_FILES['ufile']['size'] = размер на файла 
						//$HTTP_POST_FILES['ufile']['type'] = тип на файла 

						} 
						else 
						{ 
						echo "Грешка"; 
						} 
						} 
				   /**************
				   
				   UPLOAD FORM
				   
				   ***************/
 
Файда от тази част няма:

PHP:
if ($file_size > $size_bytes){ 
    echo "<center><div class='error'>Файла надвишава допyстимите размери - <b>". $size_bytes / 1024 ."</b> KB.</div></center>"; 
}
Просто казваш на юзера че файла надвишава размерите и толкоз. Нито exit-ваш, нито нищо. Файлът пак ще се качи.

Погледни това, което ти дадох. То проверява дали файлът наистина е картинка като ползва:

PHP:
// validation... since this is an image upload script we should run a check   
// to make sure the uploaded file is in fact an image. Here is a simple check: 
// getimagesize() returns false if the file tested is not an image. 
@getimagesize($_FILES[$fieldname]['tmp_name']) 
    or error('only image uploads are allowed', $uploadForm);
Това, което не ми харесва от първ поглед, е че ползва @, което е лош принцип, а другия му проблем е при създаването на рандом име на файл - за което си има функция uniqid(нещо подобно беше името...), но това можеш ръчно да го замениш.
 

Back
Горе