Tiedosto lähetetään formilla toiselle tiedostolle.
Tiedoston nimen saa napattua seuraavasti:
$realname = $HTTP_POST_FILES['kuva']['name'];
Miten saa napattua pelkän tiedostopäätteen.
.jpg .exe .gif ym tyyliin
Hmm... Tiedostopäätteen saat selville esim. seuraavalla tyylillä:
<?php $realname = $HTTP_POST_FILES['kuva']['name']; $ext = substr($realname,strrpos($realname,".")+1); //tiedoston pääte esim 'jpg' ?>
Asiasta lisää täällä
Sen, että kyseessä on kuva saa toki muutenkin varmistettua. Tässä pieni lainaus kuvanuppimis-koodistani:
<?php //maksimi tiedostokoko megatavuina $pic_max_size = 2; $pic_max_size *= 1024*1024; //muutetaan tavuiksi $pic_tmp_dir = "images/tmp/"; //alkuperäiset kuvat tänne säilöön väliaikaisesti if(isset($_FILES['pic'])){// ollaan tultu formin kautta ja lähetetty tiedosto //vähän niinkuin register globals: $_FILES['pic'][tmp_name'] löytyy tämän jälkeen muuttujasta $tmp_name foreach($_FILES['pic'] as $var => $val){ $$var = $val; } if(@is_uploaded_file($tmp_name)){// kuva on ladattu palvelimen tmp-hakemistoon if($size < $pic_max_size){ if(@move_uploaded_file($tmp_name,$pic_tmp_dir.$name)){// siirretään se omaan tmp-hakemistoon //tehdään varmistukset, että ollaan saatu kuva, eikä jotain h4x0r-ohjelmaa :) $im = @getimagesize($pic_tmp_dir.$name); if($im[2] == 1 || $im[2] == 2 || $im[2] == 3){ // kuva on gif, jpg tai png formaattia //ja jos kaikki meni odotusten mukaan, voidaan siirtyä seuraavalle sivulle header("Location: create_image.php?im=$name"); }else{ echo "Kuva ei ole tuettua formaattia"; unlink($pic_tmp_dir.$name); // tuhotaan kuva heti pois } }else{ echo "Tiedoston <b>$name</b> siirtäminen epäonnistui."; } }else{ echo "Tiedoston koko <b>".round($size/1024)." kt</b> ylitti sallitun rajan <b>".round($pic_max_size/1024)." kt</b>."; } }else{ //virheenkäsittely rutiini //found from https://www.php.net/manual/en/function.is-uploaded-file.php switch($error){ case 0: //no error; possible file attack! echo "There was a problem with your upload."; break; case 1: //uploaded file exceeds the upload_max_filesize directive in php.ini echo "Tiedoston koko <b>".($size/1024)."</b> ylitti palvelimen salliman rajan."; break; case 2: //uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the html form echo "Tiedoston koko ylitti sallitun rajan <b>$pic_max_size</b>."; break; case 3: //uploaded file was only partially uploaded echo "The file you are trying upload was only partially uploaded."; break; case 4: //no file was uploaded echo "You must select an image for upload."; break; default: //a default error, just in case! :) echo "There was a problem with your upload."; break; } } }else{ echo "Ei kuvaa"; } ?>
Tuo siis tarkistaa, että on kyseessä oikeasti kuva, eli esim tavallinen txt-tiedosto, joka on nimetty tekstitiedosto.jpg ei mene läpi. Muutenkin olen hieman tuohon virheenkäsittelyyn panostanut :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.