22. februar 2009 - 17:40
Der er
10 kommentarer og 1 løsning
Tjekke filetype ved upload fejler
Hej Jeg laver følgende filtype tjek ved et upload-script: else if ($_FILES['file']['type'] != "image/gif" || $_FILES['file']['type'] != "image/jpg" || $_FILES['file']['type'] != "image/jpeg" || $_FILES['file']['type'] != "image/pjpeg" || $_FILES['file']['type'] != "image/png") { echo "Ugyldig filtype!<br><br>Det er kun muligt at uploade filer af typerne: JPEG, GIF eller PNG."; Nogle som kan fortælle mig hvorfor at jeg får fejlmeddelelsen? Fjerner jeg hele else if-sætningen, så bliver filen fint uploaded osv. På forhånd tak,
Annonceindlæg tema
22. februar 2009 - 18:36
#1
<ole> Du har naturligvis forsøgt at skrive: echo "Filens type: ".$_FILES['file']['type']."<br>\r\n"; - så nu er jeg bare nysgerrig efter at få at vide, hvad den test gav af resultat =) /mvh </bole>
22. februar 2009 - 18:56
#2
Ja det har jeg selvfølgelig. Den skriver image/jpeg, med den billedfil jeg prøver med.
22. februar 2009 - 19:12
#3
Mon ikke du skulle bruge '&&' i stedet for '||'. Hvis filen er af typen 'image/jpeg', er der jo med garanti noget, der er opfyldt i betingelsen. Betingelsen skal jo kun være opfyldt hvis type er forskellig fra 'image/jpeg' og forskellig fra 'image/gif' og forskellig fra 'image/png' ... osv ;o)
22. februar 2009 - 19:20
#4
Dit test er selvfølgelig ok, men ikke nok. Det er meget nemt at upload en PHP-fil, med navnet etellerandet.php som en image/jpg. Hvis de uploadede filer er direkte tilgængelig, så har en hacker fri adgang til dit site. Du skal derfor yderligere kontrollere at filen har en extension, som er ok med dig, og dermed afvise .php filer.
22. februar 2009 - 19:35
#5
Ole > If-sætningen tjekker netop om filerne IKKE er nogle af de ovenstående typer. Så jeg burde vel godt kunne lave det på den her måde? Men forstår bare ikke hvorfor der kommer fejl? #4 > Tak for tippet. Det skal jeg huske.
22. februar 2009 - 19:40
#6
Du forstår ikke hvorfor der skal stå &&. Kig her if ($tal!=1 || $tal!=2) { print "fejl"; } Hvis tallet er 1, er $tal!=2 sandt. Hvis tallet er 2, er $tal!=1 sandt. Hvis tallet er hvad som helst andet, er begge sande. Derfor vil du altid komme ind i if-sætningen. Det er det samme med din if-sætning. Det rigtige vil være: if ($tal!=1 && $tal!=2) { print "fejl"; } Eller ved kun at apørge positivt: if ($tal==1 || $tal==2) { // ok } else { print "fejl"; }
22. februar 2009 - 19:48
#7
Ja det kan jeg godt se nu. Tak for hjælpen! Svar til jer begge tak´.
22. februar 2009 - 20:02
#8
Ingen point til mig, tak.
22. februar 2009 - 20:06
#9
I stedet for at spørge på MIME typen, kan du spørge på filens extension. Det er mere sikkert, da du ikke kan afvikle en PHP-fil med navnet *.png. Princippet er: <?php $allowedExts = array( "jpg" => 1, "jpeg" => 1, "gif" => 1, "png" => 1 ); $filename = "filnavn.jpg"; // Filens navn $ext = explode(".", $filename); $ext = end($ext); // Filens extension if ($allowedExts[$ext]) { print "Filen har en tilladt extension."; } ?>
22. februar 2009 - 20:08
#10
Så vidt jeg husker, findes der i PHP en funktion, der kan returnere en fils extension direkte, men jeg husker ikke ligenu, hvad den hedder. Derfor konstruktionen: $ext = explode(".", $filename); $ext = end($ext); // Filens extension =)
22. februar 2009 - 20:56
#11
Tak for points =)
Vi tilbyder markedets bedste kurser inden for webudvikling