Bonjour à tous, je sais que je ne suis pas le seul mais j'ai des problèmes avec un formulaire d'upload en php.
J'aimerais que seul les fichiers php soient interdits en upload. Alors qu'actuellement, seuls les fichiers photo sont autorisés.
Aient la flemme de lister dans mon php un nombre incalculable d'éxtensions, j'aimerais savoir si il y a un autre moyen ?
Merci d'avance.
<?php
// Vérifier si le formulaire a été soumis
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Vérifie si le fichier a été uploadé sans erreur.
if(isset($_FILES["photo"]) && $_FILES["photo"]["error"] == 0){
$allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
$filename = $_FILES["photo"]["name"];
$filetype = $_FILES["photo"]["type"];
$filesize = $_FILES["photo"]["size"];
// Vérifie l'extension du fichier
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if(!array_key_exists($ext, $allowed)) die("Erreur : Veuillez sélectionner un format de fichier valide.");
// Vérifie la taille du fichier - 5Mo maximum
$maxsize = 5 * 1024 * 1024;
if($filesize > $maxsize) die("Error: La taille du fichier est supérieure à la limite autorisée.");
// Vérifie le type MIME du fichier
if(in_array($filetype, $allowed)){
// Vérifie si le fichier existe avant de le télécharger.
if(file_exists("upload/" . $_FILES["photo"]["name"])){
echo $_FILES["photo"]["name"] . " existe déjà.";
} else{
move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]);
echo "Votre fichier a été téléchargé avec succès.";
}
} else{
echo "Error: Il y a eu un problème de téléchargement de votre fichier. Veuillez réessayer.";
}
} else{
echo "Error: " . $_FILES["photo"]["error"];
}
}
?>
Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.
Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).
De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.
Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.
Pour modifier votre titre, éditez le premier message de votre sujet.
Il ne faut surtout pas se baser sur le type MIME envoyé par le client, il met ce qui lui chante ! Il faut juste lister les extensions de fichiers que tu autorises. Ca éliminerait déjà du code.
Appliquer un strtolower sur $ext pour le array_key_exists serait pas mal aussi.
Si vraiment tu veux tout autoriser sauf les fichiers php (voire autres), au lieu de faire une liste blanche, tu inverses ta logique pour obtenir l'approche d'une liste noire (au lieu de "si c'est dans le tableau c'est ok" => "si ce n'est pas dans le tableau, c'est ok"). C'est juste une condition à inverser en somme.
Si vraiment tu as besoin du type MIME, il y a normalement les fonctions finfo qui remplacent mime_content_type (j'aurais juré que cette dernière était dépréciée par le passé)
Au lieu de vouloir vérifier si le type est dans une liste autorisée, il te suffit de vérifier si le type n'est pas dans une liste d'interdits pour ta condition.
Si tu ne comprends pas comment faire, c'est à se demander comment tu as fait pour réaliser le code que tu montres.
- Edité par Lartak 25 mars 2020 à 22:11:37
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Dans ce cas là, suis des cours, sinon tu ne va pas aller bien loin, car les opérateurs logiques c'est quand même la base.
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Lister des extensions PHP
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Merci de votre aide :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Merci de votre aide :)
Merci de votre aide :)
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Merci de votre aide :)
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Merci de votre aide :)
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.
Merci de votre aide :)
Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.