Probleme regex

la chèvre -  
TucSky Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je souhaite construire une regex qui oblige a ce que les données d'un fichier uploadé finissent soit par jpeg ou jpg ou png ou gif.
j'ai ecris ça:
if(preg_match("#([jpg]|[jpeg]|[png]|[gif])$#", $_FILES['image']['name']))

{
}

mais ça ne fonctionne pas correctement car si le fichier fini par pdf par exemple, ça passe. En fait avec cette regex, il suffit que le fichier ce termine par une des lettres indiquées dans les () et ça passe.

Merci d'avance



3 réponses

TucSky Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Donc tu veut filtrer les fichier uploadé et n'autoriser que ceux qui sont dans une liste précise ?

Si c'est ça, alors fait ça :

// Récupère l'extension du fichier

$ext = end(explode(".", $_FILES['image']['name']));
// Définit ta liste "blanche" des extensions autorisées
$whitelist = array('gif','png' ,'jpg','jpeg');
// Vérifie que l'extension du fichier appartient bien à l'une de celle du tableau
if (!in_array(strtolower($ext),$whitelist)) {
// Extension non valide, on stop le traitement
exit;
}

Bon bien sur ça fonctionne que si $_FILES['image']['name'] est au format "fichier.extension" :-)
0
la chèvre
 
merci pour ta réponse, mais je viens de trouver une combine qui fonctionne parfaitement.

Sinon j'ai un cas analogue ou je recupère un $_POST qui doit impérativement finir par 10 ,11, 12, ou 13

ce qui donne
if(preg_match("#([10]|[11]|[12]|[13])$#", $_POST['num']))

{
}

Mais évidement, j'ai le même problème que tout à l'heure à savoir 1 ça passe, 21 ça passe 2 ça passe etc...

Sinon pour info, voici comme j'ai fais pour le upload:

if (isset($_FILES['image']) AND $_FILES['image']['error'] == 0)

{
if ($_FILES['image']['size'] <= 10485760)
{
$infosfichier = pathinfo($_FILES['image']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload, $extensions_autorisees))
{
move_uploaded_file($_FILES['image']['tmp_name'], $emp . basename($_FILES['image']['name']));
}
else
{
$eimage = '* votre fichier doit etre au format jpg, jpeg, gif, png pour etre uploadé';
header("location:Ajouter.php?erreur2=".$eimage."");
exit();
}
}
else
{
$eimage = ' * votre fichier doit faire moins de 10 mo';
header("location:Ajouter.php?erreur2=".$eimage."");
exit();
}
}
0
TucSky Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Visiblement j'avais mal compris la question de départ, je vois pas le rapport entre le preg_match #([10]|[11]|[12]|[13])$# et le script d'upload de fichier.
Concretement, ou est le pregmatch dans le script d'upload ?
D'où vient le $_POST['num'] et à quoi correspond il ?
0