Hallo,


Wat is de handigste manier om te controleren of een file "jpg, png, gif of tiff" bestand is met php?

<html>
<form method="POST" action="">
<input type="file" name="attachment">
</form>
</html>


Wat kan je dan doen om te zorgen dat de afbeelding per e-mail word verzonden, moet je hem dan toch ergens opslaan?
<?php
$filename = $_FILES['attachment']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$allowed = array('jpg','png','gif','tiff');
if(!in_array( $ext, $allowed ) ) {
echo 'Niet geldig';
}
?>

Zorg ook voor een controle met mime-types, en controleer ook met [php]get_imagesize[/php] of het een afbeelding is.
Hallo Arien,

Kan ik dan niet in keer

<?php
$size = getimagesize($filename);
$fp = fopen($filename, "rb");
if ($size && $fp) {
    header("Content-type: {$size['mime']}"); //kun je hier niet dan ook jpg png gif en tiff bij zetten zodat het één validatie word?
    fpassthru($fp);
    exit;
echo "afbeelding is geldig";
} else {
echo "alleen jpg, png, gig of tiff is toegestaan";
}
?>
Ik herinner me dat getimagesize() altijd een true geeft. Je moet dus de bestandsinfo ervan uitlezen om te kijken of het om een afbeelding gaat.

Voor het gemak gebruik ik zelf de uploadclass van verot.net, die erg makkelijk werkt.
Om een juiste test uit te voeren moet je de afbeelding altijd eerst opslaan?
Als de file ge-upload is dan staat deze al onder een tijdelijke bestandsnaam op je webserver.
Je kunt die benaderen met $_FILES['attachment']['tmp_name']. Op dat bestand kun je de mimetype al checken.

[size=xsmall]Toevoeging op 29/06/2016 00:06:11:[/size]

En bestanden die niet op je webserver thuis horen wil je natuurlijk niet opslaan dus eerst checken en dan move_uploaded_file() pas gebruiken.

Leesvoer:
http://php.net/manual/en/features.file-upload.php

Reageren