Ämne: Uploadscript
Visa ett inlägg
Oläst 2006-11-27, 08:43 #7
b_anderssons avatar
b_andersson b_andersson är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Apr 2004
Inlägg: 1 067
b_andersson b_andersson är inte uppkopplad
Har WN som tidsfördriv
b_anderssons avatar
 
Reg.datum: Apr 2004
Inlägg: 1 067
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
b_andersson är inte uppkopplad   Svara med citatSvara med citat