Jag vill också föra till protokollet att jag vet att jag inte skrivit någon kod som skiljer på jpeg/gif/png när jag läser in mitt bildobjekt ($image = imagecreatefromjpeg($filename);), men det fixar jag sedan när detta är löst!
Hej!
Sitter just nu och pillar med ett uppladdningsscript som tar den uppladdade filen (som skall vara en bild) och förminskar den. Detta blir naturligtvis riksknas om man laddar upp något annat än just bilder. Jag funderar nu på hur man ska kontrollera detta. Att titta på vilken MIME type filen har verkar inte tillförlitligt då den infon inte alltid finns, så jag klurade på en lösning med kontroll av filändelse istället och har fått det att fungera lite halvt.
Här är koden jag har för tillfället:
<?php
if(@$_GET['a'] == 'save') {
//die(substr($file['name'], -3, 3));
// filändelsekontroll
$allowedExtensions = array("jpg","jpeg","gif","png");
foreach ($_FILES as $file) {
if ($file['tmp_name'] != '') {
if ( !(in_array( end( explode( ".", strtolower($file['name']) ) ), $allowedExtensions)) || substr($file['name'], -3, 3) == 'zip' ) {
die($file['name'].' är ej av godkänd filtyp (jpg, jpeg, gif eller png)!<br/>'.
'<a href="javascript:history.go(-1);">'.
'<< Backa</a>');
}
}
}
// slut kontroll av filändelse.
if(@$_FILES['newAvatar']['name'] != '') {
$filename = 'profpics/' . $_SESSION['id'] . '__' . date("Y_m_d__H_i_s") . '__' . $_FILES['newAvatar']['name'];
move_uploaded_file($_FILES['newAvatar']['tmp_name'], $filename);
$image = imagecreatefromjpeg($filename);
// Max slutliga dimensioner
$max_width = 140;
$max_height = 190;
// Nuvarande dimensioner
$old_width = imagesx($image);
$old_height = imagesy($image);
// Beräkna skala
$scale = min($max_width/$old_width, $max_height/$old_height);
// Sätt nya dimensioner utifrån den beräknade skalan
$new_width = ceil($scale*$old_width);
$new_height = ceil($scale*$old_height);
// Skapa tomt bildobjekt
$new = imagecreatetruecolor($new_width, $new_height);
// Förminska (troligtvis, annars förstora, men det lär väl aldrig hända)
imagecopyresampled($new, $image, 0, 0, 0, 0, $new_width, $new_height, $old_width, $old_height);
// Spara
imagejpeg($new, $filename, 60);
// Förstör objekt
imagedestroy($image);
imagedestroy($new);
?>
Anledningen till att jag lagt till "substr($file['name'], -3, 3) == 'zip'" är för att just .zip-filer smiter igenom kontrollen. Jag har stirrat så länge på detta nu. Vad gör jag för fel?
:stud
