Damien Flandrin

Tutoriels, astuces et conseils sur le développement web par un développeur web

Tutoriel - Comment uploader un fichier en PHP

il y a 1 an · 3 MIN DE LECTURE
#HTML  #Tutoriel  #PHP 

Dans ce tutoriel, nous allons apprendre comment uploader des fichiers sur un serveur distant en utilisant un formulaire HTML simple et du PHP. Vous pouvez télécharger n'importe quel type de fichier comme des images, des vidéos, des fichiers ZIP, des documents Microsoft Office, des fichiers PDF, ainsi que des fichiers exécutables et un large éventail d'autres types de fichiers.

Etape 1 : Mise en place d'un formulaire HTML pour uploader un fichier.

L'exemple suivant créera un formulaire HTML simple qui peut être utilisé pour uploader des fichiers.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Formulaire d'upload de fichiers</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <h2>Upload Fichier</h2>
        <label for="fileUpload">Fichier:</label>
        <input type="file" name="photo" id="fileUpload">
        <input type="submit" name="submit" value="Upload">
        <p><strong>Note:</strong> Seuls les formats .jpg, .jpeg, .jpeg, .gif, .png sont autorisés jusqu'à une taille maximale de 5 Mo.</p>
    </form>
</body>
</html>

À savoir : En plus d'un champ de sélection de fichier, le formulaire d'upload doit contenir un attribut enctype="multipart/form-data". Cet attribut garantit que les données du formulaire sont codées en tant que données MIME en plusieurs parties - ce qui est nécessaire pour uploader de grandes quantités de données binaires telles que des fichiers.

Etape 2 : Traitement du fichier uploadé

Voici le code complet de notre fichier "upload.php". Il stockera le fichier uploadé dans un dossier d'upload et met en œuvre quelques contrôles de sécurité de base comme le type de fichier et la taille du fichier pour s'assurer que les utilisateurs upload le bon type de fichier et dans la limite permise.

<?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"];
    }
}
?>

À savoir : Une fois qu'un fichier a été uploadé avec succès, il est automatiquement stocké dans un répertoire temporaire sur le serveur. Pour utiliser ce fichier, ou le stocker de façon permanente, vous devez le déplacer du répertoire temporaire vers un emplacement permanent à l'aide de la fonction move_uploaded_file() de PHP.

Explication du Code

Une fois que le formulaire est soumis, l'information sur le fichier uploadé est accessible via un tableau superglobal appelé _FILES. Par exemple, notre formulaire d'upload contient un champ de sélection de fichier appelé photo (name="photo"), si un utilisateur a uploadé un fichier en utilisant ce champ, nous pouvons obtenir ses détails comme le nom, le type, la taille, le nom temporaire ou toute erreur survenue lors de la tentative d'upload via le tableau associatif $_FILES["photo"] :

  • $_FILES["photo"]["name"] — Cette valeur du tableau spécifie le nom original du fichier, y compris l'extension du fichier. Il n'inclut pas le chemin d'accès au
  • $_FILES["photo"]["type"] — Cette valeur du tableau spécifie le type MIME du fichier.
  • $_FILES["photo"]["size"] — Cette valeur du tableau spécifie la taille du fichier, en octets.
  • $_FILES["photo"]["tmp_name"] — Cette valeur du tableau spécifie le nom temporaire, y compris le chemin complet qui est assigné au fichier une fois qu'il a été uploadé sur le serveur.
  • $_FILES["photo"]["error"] — Cette valeur du tableau spécifie le code d'erreur ou d'état associé à l'upload du fichier, par exemple 0, s'il n'y a pas d'erreur.

···

Damien Flandrin

Je suis développeur web pour l'agence Carredas, je fais principalement du PHP avec Laravel et Prestashop.

Développeur Web - Damien Flandrin