PHP Téléchargement de fichiers
Avec PHP, il est facile de télécharger des fichiers sur le serveur.
Cependant, cette facilité comporte des risques, alors soyez toujours prudent lorsque vous autorisez les téléchargements de fichiers !
Configurer le fichier "php.ini"
Tout d'abord, assurez-vous que PHP est configuré pour autoriser les téléchargements de fichiers.
Dans votre fichier "php.ini", recherchez la directive file_uploads et définissez-la sur On :
file_uploads = On Créer le formulaire HTML
Ensuite, créez un formulaire HTML qui permet aux utilisateurs de choisir le fichier image qu'ils souhaitent télécharger :
<!DOCTYPE html>
<html>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
Sélectionnez l'image à télécharger :
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Télécharger l'image" name="submit">
</form>
</body>
</html> Voici quelques règles à suivre pour le formulaire HTML ci-dessus :
- Assurez-vous que le formulaire utilise method="post"
- Le formulaire doit également inclure l'attribut suivant : enctype="multipart/form-data". Cela spécifie quel type de contenu utiliser lors de la soumission du formulaire.
Sans ces exigences, le téléchargement de fichiers ne fonctionnera pas.
D'autres éléments à noter :
- L'attribut type="file" de la balise <input> affiche le champ de saisie comme un contrôle de sélection de fichier, avec un bouton "Parcourir" à côté du contrôle de saisie.
Le formulaire ci-dessus envoie des données à un fichier appelé "upload.php", que nous allons créer ensuite.
Créer le script PHP de téléchargement de fichiers
Le fichier "upload.php" contient le code pour télécharger un fichier :
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Vérifiez si le fichier image est une véritable image ou une fausse image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "Le fichier est une image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "Le fichier n'est pas une image.";
$uploadOk = 0;
}
}
?> Explication du script PHP :
- $target_dir = "uploads/" - spécifie le répertoire où le fichier sera placé.
- $target_file spécifie le chemin du fichier à télécharger.
- $uploadOk=1 n'est pas encore utilisé (il sera utilisé plus tard).
- $imageFileType contient l'extension du fichier (en minuscules).
- Ensuite, vérifiez si le fichier image est une véritable image ou une fausse image.
Remarque : Vous devrez créer un nouveau répertoire appelé "uploads" dans le répertoire où se trouve le fichier "upload.php". Les fichiers téléchargés y seront enregistrés.
Vérifier si le fichier existe déjà
Maintenant, nous pouvons ajouter quelques restrictions.
Tout d'abord, nous allons vérifier si le fichier existe déjà dans le dossier "uploads". S'il existe, un message d'erreur est affiché et $uploadOk est défini sur 0 :
// Vérifiez si le fichier existe déjà
if (file_exists($target_file)) {
echo "Désolé, le fichier existe déjà.";
$uploadOk = 0;
} Limiter la taille du fichier
Le champ de saisie de fichier dans notre formulaire HTML ci-dessus est nommé "fileToUpload".
Maintenant, nous voulons vérifier la taille du fichier. Si le fichier est plus grand que 500 Ko, un message d'erreur est affiché et $uploadOk est défini sur 0 :
// Vérifiez la taille du fichier
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Désolé, votre fichier est trop grand.";
$uploadOk = 0;
} Limiter le type de fichier
Le code ci-dessous n'autorise que les utilisateurs à télécharger des fichiers JPG, JPEG, PNG et GIF. Tous les autres types de fichiers affichent un message d'erreur avant de définir $uploadOk sur 0 :
// Autoriser certains formats de fichiers
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Désolé, seuls les fichiers JPG, JPEG, PNG & GIF sont autorisés.";
$uploadOk = 0;
} Script PHP de téléchargement de fichiers complet
Le fichier complet "upload.php" ressemble maintenant à ceci :
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Vérifiez si le fichier image est une véritable image ou une fausse image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "Le fichier est une image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "Le fichier n'est pas une image.";
$uploadOk = 0;
}
}
// Vérifiez si le fichier existe déjà
if (file_exists($target_file)) {
echo "Désolé, le fichier existe déjà.";
$uploadOk = 0;
}
// Vérifiez la taille du fichier
if ($_FILES["fileToUpload"]["size"] > 500000) {
echo "Désolé, votre fichier est trop grand.";
$uploadOk = 0;
}
// Autoriser certains formats de fichiers
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érifiez si $uploadOk est défini sur 0 par une erreur
if ($uploadOk == 0) {
echo "Désolé, votre fichier n'a pas été téléchargé.";
// si tout va bien, essayez de télécharger le fichier
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "Le fichier ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " a été téléchargé.";
} else {
echo "Désolé, il y a eu une erreur lors du téléchargement de votre fichier.";
}
}
?> Référence complète du système de fichiers PHP
Pour une référence complète des fonctions du système de fichiers, consultez notre Référence PHP du système de fichiers complète.