PDA

View Full Version : [php] controle in IE werkt nie, FF wel


massy
21-05-2007, 21:08
In een uploadscript gebruik ik deze lijnen:

$type1 = "image/jpeg" ;
$type2 = "image/png" ;


if (($extentie_check == "ok") && ($_FILES[$bestand]['type'] == $type1) OR ($_FILES[$bestand]['type'] == $type2 ) && ($_FILES[$bestand]["size"] < $maxgrootte)) {

FF heeft hiermee geen problemen, IE (zeker laatste versie) wel.
Als ik een afbeelding van het juiste type upload krijg ik de melding dat het verkeerde type gebruikt wordt.

Ik heb de fout kunnen tracen tot dit stukske code:
&& ($_FILES[$bestand]['type'] == $type1) OR ($_FILES[$bestand]['type'] == $type2 )

Waarom werkt dit niet in IE?

Random
21-05-2007, 21:33
Het gemakkelijkste is om te kijken welk type je afbeelding dan wel meekrijgt he, dus doe tijdelijk iets in de zin van het volgende:


if (($extentie_check == "ok") && ($_FILES[$bestand]['type'] == $type1) OR ($_FILES[$bestand]['type'] == $type2 ) && ($_FILES[$bestand]["size"] < $maxgrootte)) {

...

} else {
print ("<pre>");
var_dump ($_FILES);
print ("</pre>");
die ("<p>IMAGE TYPE = " . $_FILES[$bestand]['type']);
}


Met deze info zal normaalgezien meteen duidelijk zijn wat het probleem is.

Wat ik persoonlijk wel om problemen vragen vind, is de manier waarop je haakjes gebruikt in je conditie. Het lijkt me alvast duidelijker om het volgende te gebruiken:

if ($extentie_check == "ok" && ($_FILES[$bestand]['type'] == $type1 || $_FILES[$bestand]['type'] == $type2) && $_FILES[$bestand]["size"] < $maxgrootte)

Mr. Santa
22-05-2007, 04:49
Internet Explorer is to blame. Zoals maar al te vaak houdt IE hier zich niet aan de standaarden en kent het zijn eigen MIME types toe voor zowel jpeg als png, die niet erkend zijn door het IANA.

De MIME type 'image/jpeg' wordt, als het bestand is opgeslagen als progressive jpeg (het merendeel van de jpegs tegenwoordig), 'image/pjpeg', de MIME type 'image/png' kent IE als 'image/x-png'.

Verfijn je condition met de vier verschillende mogelijkheden ('image/jpeg', 'image/pjpeg', 'image/png' en 'image/x-png') en het zou moeten werken. En ik zou zoals Random zegt inderdaad opletten met die haakjes, duidelijk is anders.

$type1 = "image/jpeg";
$type2 = "image/pjpeg";
$type3 = "image/png";
$type4 = "image/x-png";

$filetype = $_FILES[$bestand]['type'];
$filesize = $_FILES[$bestand]['size'];

if ($extentie_check == "ok" && ($filetype == $type1 || $filetype == $type2 || $filetype == $type3 || $filetype == $type4) && $filesize < $maxgrootte)


Of als je creatief wilt zijn, kun je natuurlijk ook kijken of de string 'jpeg' of 'png' voorkomt in de MIME type:
$filetype = $_FILES[$bestand]['type'];
$filesize = $_FILES[$bestand]['size'];

if ($extentie_check == "ok" && (strpos($filetype, "jpeg") === true || strpos($filetype, "png") === true) && $filesize < $maxgrootte)

O en btw, zoals je het nu gebruikt werkt je $maxgrootte niet als maximum grootte, wel als maximum grootte + 1. Als je het echt als maximum grootte wilt gebruiken, neem je best <= als operator, 'kleiner of gelijk aan'. Een detail, het gaat slechts over een byte, maar toch. :)

massy
22-05-2007, 08:49
Haakjes zijn mijn werk niet, mijn php skills reiken niet zo ver, het is voornamelijk knip en plak werk. Daarom is het niet altijd even overzichtelijk.

Merci voor de hulp!

Mr. Santa
23-05-2007, 18:48
Oeps, ik zie net dat ik een fout heb gemaakt in mijn vorige post.
Ik had $_FILES[$bestand['type'] getypt, dat moet natuurlijk $_FILES[$bestand]['type'] zijn. Ik heb het aangepast in m'n post, maar als je eerder copy/paste had gedaan in je eigen script, zeker veranderen, anders zal het niet werken. :)

massy
24-05-2007, 16:42
Fout nie overgenomen, toch merci vo de melding.

Mr. Santa
24-05-2007, 19:01
You're welcome, leuk om te zien dat je er zelf ook bij nadenkt en niet zomaar m'n fouten overneemt. ;-)