Citat:
Originally posted by David@Nov 27 2006, 01:45
Jag fortsätter på den här tråden.
I flera år har jag testat så att webläsaren skickar rätt MIME-typ av de JPEG-filer jag vill ta emot. Detta för att få någon typ av säkerhet i att man inte tar emot vilken typ som helst som slutar med .jpg. Det är säkert inte säkert, och det har ett problem: bilder från digitalkamerar har ofta ingen MIME-typ satt. Erfarenheten visar också att Photoshop (som många använder) är dåligt på att sätta dem. Så webläsaren kan inte skicka någon MIME-typ varför jag, tills nu, inte tagit emot filerna.
Vad ska jag göra? Det är många som har helt okej JPEG-filer att ladda upp men som stoppas av att MIME-typen inte finns att tillgå. Man kan ju testa filens efternamn som i exemplet ovan men det har från början känts otillräckligt.
Några kommentarer?
|
Jag har använt följande kod för att kontrollera att det är rätt filtyp, och det har fungerat bra för mig:
Kod:
<?php
//Example PHP code to determine the type of a file given
//8 bytes of header data. Much more accurate than checking
//the user-supplied Content-Type and of course this is far
//better than relying on checking the file extension :).
//(C)2004 r1ch.net. I place this code into the public domain
//in the hope it is useful to somebody.
//open a file
$image_data = fopen($argv[1], "rb");
//grab first 8 bytes, should be enough for most formats
$header_bytes = fread($image_data, 8);
//close file
fclose ($image_data);
//compare header to known signatures
if (!strncmp ($header_bytes, "\xFF\xD8", 2))
$file_format = "JPEG";
else if (!strncmp ($header_bytes, "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A", 8))
$file_format = "PNG";
else if (!strncmp ($header_bytes, "FWS", 3) || !strncmp ($header_bytes, "CWS"))
$file_format = "SWF";
else if (!strncmp ($header_bytes, "BM", 2))
$file_format = "BMP";
else if (!strncmp ($header_bytes, "\x50\x4b\x03\x04", 4))
$file_format = "ZIP";
else if (!strncmp ($header_bytes, "GIF", 3))
$file_format = "GIF";
else
$file_format = "unknown";
print "The file is a $file_format file.\n";
?>
//Björn