Terve, olen tekemässä pientä kuvauppia kotisivuilleni php:lla, ja ajattelin tarkistaa kuvan tiedostotyypin switch-case rakenteen avulla. Tuli ongelma, kun tuo koodi heittää aina default-kohtaan, tiedä sitten onko tuossa uploaderiformissa joku ongelma? Itselläni ei silmään sattunut...
Uppimisformi:
Kuva:<br> <form method="post" enctype="multipart/form-data" action="process.php"> <input type="file" name="imagefile" size="27"> <br>Kommentit (valinnainen):<br> <textarea rows="textarea" width="20" cols="20" name="comments"></textarea><br> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize ?>"> <input type="submit" value="Upload" name="upload"> </form>
process.php:sta käytettävä osa:
<?php include "header.php"; $userfile = $HTTP_POST_FILES['imagefile']['tmp_name']; $userfile_name = $HTTP_POST_FILES['imagefile']['name']; $userfile_size = $HTTP_POST_FILES['imagefile']['size']; $userfile_type = $HTTP_POST_FILES['imagefile']['type']; if($_POST['comments']) { $comments = $_POST['comments']; if (get_magic_quotes_gpc() == 0) { $comments = addslashes($comments); } $comments = nl2br($comments); } else { $comments = 'Tälle kuvalle ei ole kommentteja'; } if ($userfile_type == 'image/x-png') { $userfile_type = 'image/png'; } if ($userfile_type == 'image/pjpeg') { $userfile_type = 'image/jpeg'; } $userfile_error = $HTTP_POST_FILES['imagefile']['error']; if ($userfile_error > 0) { echo 'Virhe: '; switch($userfile_error) { case 1: echo 'Kuva ylitti suurimman sallitun tiedostokoon'; break; case 2: echo 'Kuva ylitti suurimman sallitun tiedostkoon'; break; case 3: echo 'Sama kuva on jo ladattu serverille'; break; case 4: echo 'Et valinnut kuvaa'; break; } exit; } switch($userfile_type) { case 'image/gif': break; case 'image/png': break; case 'image/jpeg': break; case 'image/bmp': echo "BMP:tä ei tueta. Ole hyvä, ja muuta kuvasi .png, .jpg, tai .gif -muotoon. "; exit; default: echo "Virhe: Lataamasi tiedosto ei ole kuva!"; exit; break; }
Kiitos avusta jo etukäteen!
Mod. lisäsi kooditagit
Mikä PHP:n versio on käytössä? $HTTP_POST_FILES
on vanhentunut PHP:n versioissa > 4.1, sitä korvaa $_FILES
-taulukko uudemmissa. Oletko tarkastanut minkä arvon muuttuja $userfile_type
saa? Yksi syy voisi myös olla, että selain saattaa ilmoittaa kuvan mime-tyypiksi mitä vaan, joten siihen ei kannata luottaa.
Mjooh, firefoxilla tätä olen lähinnä kokeillut. Kokeilen katsoa tuon $userfile_type:n arvon, mutta saattaa olla että kyse on tuosta vanhentumisesta (muistaakseni palvelin tukee uudempaa, kuin 4.1.
Edit: Kiitos! Kyse oli juuri tästä! :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.