webForumDet fria alternativet

Bästa och säkraste sättet att ladda upp bilder?

8 svar · 861 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

Hej alla glada!

Jag vill ha ett bilduppladdningsscript som är säkert och som funkar i så många fall som möjligt med vissa begränsningar ;) Det som saknas i det jag knåpat ihop hittills är: maxstorlek MB, maxstorlek pixlar, check så att endast .jpg eller .gif tillåts samt att man ska kunna skicka med ett meddelande. Det går inte att hämta form-info från textfält och spara direkt till databas när man kör multiform-data-grej va? Eller är jag kvar i ASP-banor nu då man fick göra på ett speciellt sätt..?

Jag funderar även på hur svårt det är att ordna så att väldigt stora filer sparas om till mindre format direkt i uppladdningen. Har sett att en rad sidor använder det systemet. Vilket är mycket smart då långt ifrån alla vet hur man sparar om en fil till rätt storlek osv.

Blir glad för alla förslag hur jag kan utveckla mitt script :) Eller en länk till ett bra bilduppladdningsscript, trådar om samma ämne osv :) Min kod hittills. (så hoppas vi att wF inte gör om den allt för mycket...)

	if(isset($_FILES['userfile']))
		{
		  // mappen där filerna ska hamna
		$upload_dir = 'bilder/';
		  
		  // kolla om en fil har blivit angiven
		  if(empty($_FILES['userfile']['name']))
			die('Var god välj en fil att ladda upp!');
		  
		  // flytta filen
		  if(is_uploaded_file($_FILES['userfile']['tmp_name']))
			move_uploaded_file($_FILES['userfile']['tmp_name'],$upload_dir.$_FILES['userfile']['name']);
		  // skriv ut ett meddelande
		  echo "<b>Filen ".$_FILES['userfile']['name']." har laddats upp!</b><br><br>Sökväg till bilden: \"bilder/".$_FILES['userfile']['name'];
		}

Mvh, Sebastian

PeddaMedlem sedan juni 20006 032 inlägg
#2

Här kommer några tips.

// Ta bort STORA bokstäver mellanslag å ä och ö
$_FILES["userfile"]["name"] = strtolower($_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace(' ', '_', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('å', 'a', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('ä', 'a', $_FILES["userfile"]["name"]);
$_FILES["userfile"]["name"] = str_replace('ö', 'o', $_FILES["userfile"]["name"]); 
			
$fil_storlek = $_FILES['userfile']['size'];
$fil_typ = substr($_FILES["userfile"]["name"], -4, 4);
		
// Godkänn storleken (307200 bytes = 300 kb)	
if ($fil_storlek > 307200) {
	$reg_error[] = 0; 
}
//  Godkänn filändelsen
if ($fil_typ != ".jpg" && $fil_typ != ".gif" && $fil_typ != "jpeg") {
	$reg_error[] = 1;
}

// errorlista 
$error_list[0] = "Bilden är för stor. Får max vara 300kb."; 
$error_list[1] = "Bilden är av fel filtyp. Måste vara JPG, JPEG eller GIF."; 
$error_list[2] = "Bilden är för bred. Får max vara 600px.";
$error_list[3] = "Bilden är för hög. Får max vara 600px.";
			
if (isset($reg_error)){ 
	
// Någon uppgift är fel, skriv ut felmeddelande...
	echo "Något blev fel:<br>\n"; 
	echo "<ul>\n"; 
    for ($i=0; $i<sizeof($reg_error); $i++) { 
		
        echo "<li>{$error_list[$reg_error[$i]]}</li>\n"; 
	} 
		echo "</ul>\n"; 
		echo "<br><a href=\"javascript:history.back()\">Tillbaka</a>\n";
		exit;
}

Att skicka med information från samma formulär är inga problem även om det formuläret är satt till enctype="multipart/form-data"

bassebhuMedlem sedan nov. 20016 480 inlägg
#3

Schyrre :)

Men som jag förstått det så skapas tre variabler med ändelserna _name, _size och _type.

Om nu filtypen finns i denna variabel, vore inte det smartare att använda den i en if-sats i stället för:

$fil_typ = substr($_FILES["userfile"]["name"], -4, 4);
if ($fil_typ != ".jpg" && $fil_typ != ".gif" && $fil_typ != "jpeg") {
$reg_error[] = 1;

Jag menar. Det händer väl att det laddas upp filer utan ändelse i filnamnet. Och om den bara går på ändelsen så kan man väl ladda upp nån annan typ av fil fast med t ex .jpg som ändelse? Vilket inte vore så lyckat.

Tackar för svar.

MatteMedlem sedan aug. 20002 975 inlägg
#4

Tyvärr är det väl endast IE (och kanske ytterligare någon/några läsare) som kollar filen för att försöka bedöma rätt mime-typ.

Mozilla/Firefox och Opera kollar endast efter filändelsen och sätter mime-typ efter denna.

Jag tog upp det med Firefox-folket, men de ansåg detta var en säkerhetsrisk hos IE.

PeddaMedlem sedan juni 20006 032 inlägg
#5

Ja, jag har läst otaliga artiklar och forumsinlägg ang hur man bäst kollar filtyp, och alla har haft olika syner på saken.
Så vilket sätt som är bäst vet jag faktiskt inte.

MatteMedlem sedan aug. 20002 975 inlägg
#6

Är det bilder det handlar om brukar jag göra kontrollen med getimagesize mot $_FILES['userfile']['tmp_name'].

TomasAMedlem sedan feb. 2003173 inlägg
#7

Hur gör jag enkel formatering i formulärfält?

Hej alla wFare - och mycket God och Glad Påsk!

Har gjort ett nyhetsscript, som andvänds av ganska många i klubben
och det är ju jätttekul, men de flesta kan inte datorscrilt eller html.

Jag vill i inmatningen kunna ha symboler för textformatering
- precis som i just denna inmatingsrutan.

Självklart finns det någon som redan gjort detta typ av script.

Tips mottages tacksamt
:stud

Hoppsan mitt inlägg skulle nog ha en egen tråd.

PeddaMedlem sedan juni 20006 032 inlägg
#8

http://www.webforum.nu/showthread.php?p=1176479#post1176479

du får använda javascript för att infoga t.ex i formuläret

PeddaMedlem sedan juni 20006 032 inlägg
#9

Letade reda på en gammal kod jag skrev för några år sen.
Forumet här klagade på att jag bifogade för många bilder, så jag laddar upp det istället.

135 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)