PHP - Téléversement de fichiers

Salut à toi, aspirant(e)s développeur(euse)s PHP ! Aujourd'hui, nous allons plonger dans le monde passionnant du téléversement de fichiers avec PHP. En tant que ton prof de informatique bienveillant(e), je suis là pour te guider dans cette aventure étape par étape. Alors, prends-toi ta boisson favorite, installe-toi confortablement, et embarquons ensemble dans cette aventure de téléversement de fichiers !

PHP - File Uploading

Comprendre le téléversement de fichiers

Avant de nous lancer dans le code, penchons-nous un instant sur ce qu'est le téléversement de fichiers. Imagine que tu envoies une lettre à un(e) ami(e). Tu écris la lettre, la mets dans une enveloppe, et l'envoies par le service postal. Le téléversement de fichiers est plutôt similaire ! Au lieu d'une lettre, tu envoies un fichier (comme une image ou un document) de ton ordinateur vers un serveur web.

Créer un formulaire de téléversement de fichiers

La première étape de notre aventure de téléversement de fichiers est de créer un formulaire HTML qui permet aux utilisateurs de sélectionner et de téléverser un fichier. Pense à ce formulaire comme l'enveloppe que nous utilisons pour envoyer notre lettre.

Voici un exemple de formulaire HTML simple :

<form action="upload.php" method="post" enctype="multipart/form-data">
Sélectionner une image à téléverser :
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Téléverser l'image" name="submit">
</form>

Reprenons cela :

  1. action="upload.php" : Cela indique au formulaire où envoyer les données. Dans ce cas, nous créerons un script PHP appelé upload.php pour gérer le téléversement de fichiers.
  2. method="post" : Cela spécifie que nous utilisons la méthode POST pour envoyer les données.
  3. enctype="multipart/form-data" : C'est crucial ! Cela indique au formulaire que nous envoyons plus que du texte - nous envoyons un fichier.
  4. <input type="file"> : Cela crée un bouton qui permet aux utilisateurs de sélectionner un fichier depuis leur ordinateur.

Créer un script de téléversement

Maintenant que nous avons notre formulaire, nous devons créer le script PHP qui va gérer le téléversement de fichiers. C'est là que la magie opère !

Créons notre fichier upload.php :

<?php
if(isset($_POST["submit"])) {
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Vérifier si le fichier existe déjà
if (file_exists($target_file)) {
echo "Désolé, le fichier existe déjà.";
$uploadOk = 0;
}

// Vérifier la taille du fichier
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Désolé, votre fichier est trop volumineux.";
$uploadOk = 0;
}

// Autoriser certains formats de fichier
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Désolé, seuls les fichiers JPG, JPEG, PNG & GIF sont autorisés.";
$uploadOk = 0;
}

// Vérifier si $uploadOk a été mis à 0 par une erreur
if ($uploadOk == 0) {
echo "Désolé, votre fichier n'a pas été téléversé.";
// Si tout est correct, essayer de téléverser le fichier
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "Le fichier ". basename( $_FILES["fileToUpload"]["name"]). " a été téléversé.";
} else {
echo "Désolé, une erreur s'est produite lors du téléversement de votre fichier.";
}
}
}
?>

Whaou, c'est beaucoup de code ! Ne t'inquiète pas, nous allons le décomposer étape par étape :

  1. Premièrement, nous vérifions si le formulaire a été soumis en utilisant isset($_POST["submit"]).
  2. Nous configurons quelques variables :
  • $target_dir : Le répertoire où nous stockerons les fichiers téléversés.
  • $target_file : Le chemin complet du fichier téléversé.
  • $uploadOk : Un drapeau pour suivre si c'est correct de téléverser le fichier.
  • $imageFileType : L'extension du fichier téléversé.
  1. Nous effectuons quelques vérifications :
  • Le fichier existe-t-il déjà dans notre répertoire des téléversements ?
  • Le fichier est-il trop volumineux ?
  • Le format du fichier est-il autorisé ?
  1. Si l'une de ces vérifications échoue, nous mettons $uploadOk à 0.

  2. Finalement, si tout est correct ($uploadOk == 1), nous utilisons la fonction move_uploaded_file() pour déplacer le fichier téléversé de son emplacement temporaire vers notre répertoire des téléversements.

Méthodes courantes de téléversement de fichiers

Voici un tableau des méthodes couramment utilisées dans le téléversement de fichiers avec PHP :

Méthode Description
$_FILES["file"]["name"] Le nom original du fichier sur la machine du client
$_FILES["file"]["type"] Le type MIME du fichier
$_FILES["file"]["size"] La taille du fichier en octets
$_FILES["file"]["tmp_name"] Le nom de fichier temporaire du fichier stocké sur le serveur
$_FILES["file"]["error"] Le code d'erreur associé à ce téléversement de fichier
move_uploaded_file() Déplace un fichier téléversé vers un nouvel emplacement

Conclusion

Et voilà, les amis ! Nous avons créé un formulaire qui permet aux utilisateurs de sélectionner un fichier, et un script PHP qui gère le processus de téléversement, avec des vérifications d'erreur et des restrictions de type de fichier.

N'oublie pas, le téléversement de fichiers peut être un risque de sécurité s'il n'est pas géré correctement. Toujours valider et nettoyer les entrées des utilisateurs, restreindre les types et tailles de fichiers, et stocker les fichiers téléversés dans un répertoire qui n'est pas directement accessible via un navigateur web.

En conclusion de cette leçon, je me souviens d'un étudiant qui a téléversé un fichier vidéo de 1 Go sur un site web destiné aux photos de profil. On peut dire que ce n'a pas bien terminé pour le serveur ! Alors souviens-toi toujours de définir ces limites de taille de fichier, les amis !

Continuez à pratiquer, à coder, et surtout, continuez à vous amuser avec PHP ! Jusqu'à la prochaine fois, bon téléversement !

Credits: Image by storyset