[PHP] plaatjes upload

Pagina: 1
Acties:

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
hoe kan ik zeggen dat die alleen maar JPG of GIF mag uploaden :?
code:
1
<input type="File" name="picture" value = "Bladeren" size="25">

bij die kun je nog wel htm en html uploaden

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 09:38
http://www.php.net/manual/en/features.file-upload.php

Hier staat hoe je file-uploads in php afhandelt. M.b.v. de variable $userfile_type (of iets soortgelijks, afhankelijk van de variabelenaam die jij hem hebt toegekend) kan je filteren op image/gif en image/jpeg.

Indien iemand iets anders upload, dan kan je een errorschermpje o.i.d. laten zien.

Volgens mij is deze classificatie onafhankelijk van de extension (ofwel, als jij een .html rename't naar een .gif, dan heeft-ie wel door dat het een .html is). Dit weet ik echter niet zeker. Kwestie van uitproberen, of een mede-tweaker moet het antwoord zo uit zijn mouw kunnen schudden!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Dat kan je niet voorkomen. Zelfs al zou je de browser zo gek kunnen krijgen (bijvoorbeeld via de accept-content-type?), dan kan iemand altijd nog bent de hand de http-request doen. Nee, je moet op de server kant controleren of het wel een jpg of gif is. (in geval van php door bijvoorbeeld de breedte en hoogte van het plaatje op te vragen).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • MikeN
  • Registratie: April 2001
  • Laatst online: 13-09 17:41
$userfile_type hangt volledig af van de browser. Als de browser als content-type piet/puk doorgeeft, dan staat daar dus piet/puk. Als je een html renamed naar gif, staat daar image/gif of application/octet-stream. Het is dus nooit zeker te zeggen. Een manier is om het te checken via de Image functies van PHP, maar die werken niet altijd met GIF, dat hangt weer van de versie af enzo.

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
De functie van php om de breedte en hoogte op te vragen, werkt met gif, jpg en png (en misschien met nog wel meer). Daar heb je uitbreidingsbibliotheken als GD niet voor nodig.

Hoe die functie eigenlijk heet... eeh... iets als GetImageSize ofzo?)

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 09:38
In dat geval moet je a.h.v. opgestuurde file zelf bepalen wat voor type het is. Dit kan a.h.v. de identification-bytes die elke file in zich heeft.

Kijk hiervoor op www.wotsit.org

Om je op weg te helpen:

Identification van een JPEG-file is 0xFF 0xD8 in de eerste 2 bytes

Identification van een GIF-file is GIF in de eerste 3 bytes.

edit:

en zo zie je maar, even omhoog schoppen doet wonderen ;)

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 14-09 09:56
Ik wilt niet al te opdringerig zijn, maar als je de breedte en hoogte opvraagt en de functie geeft geen fout terug en bovendien een geldige breedte en hoogte is dat beter, want dan heeft de persoon die de afbeelding opstuurt in ieder geval een deels geldig plaatje opgestuurt (verkeerd overgezonden, corrupte file of genepte headerbytes).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 09:38
ok, da's is natuurlijk wel waar, en ook een stuk makkelijker. Zeker aan te raden voor het doel waarvoor je het gebruikt.

De methode van identification-bytes kan heel handig zijn voor andere bestandsformaten.

Maar 4Real: de methode getImageSize werkt hier het makkelijkst en inderdaad waarschijnlijk ook het best

Verwijderd

Met $filetype = $HTTP_POST_FILES['picture']['type']; kom je er achter welk type het bestand is.

En dan checken op:
"image/gif" = gif plaatje
"image/pjpeg" = jpeg plaatje

Dit moet dus in het bestand dat de upload verwerkt!
Pagina: 1