Passer au contenu

Gérez le téléchargement de fichiers avec PHP

Le langage PHP offre des fonctions évoluées pour gérer le téléchargement de fichiers sur un site. En prenant garde à certaines règles élémentaires de sécurité, vous pouvez créer un module générique de téléchargement de fichiers.

La plupart des développeurs s’appuient sur l’association de pages dynamiques et d’une base de données pour faciliter la mise à jour des sites web qu’ils construisent. Mais l’ajout d’images et le téléchargement de fichiers sont souvent laissés de côté, essentiellement pour des raisons de sécurité. Cette mise en ?”uvre vous explique comment offrir des fonctions de téléchargement aux internautes de votre site, sans pour autant négliger le contrôle préalable des fichiers téléchargés.

1. Installez EasyPHP

Ensemble préparamétré de logiciels pour plate-forme Windows, EasyPHP comprend PHP, mySQL, PHPmyAdmin, etc. (programmes prêts à l’emploi). Une fois ces programmes téléchargés, décompressez-les dans le répertoire d’installation de votre choix, puis copiez les librairies DLL du répertoire “DLL à copier” dans “c:winntsysteme32”. Vérifiez ensuite que le paramètre “upload_tmp_dir” du fichier “php.ini” pointe bien vers le répertoire de votre choix et n’oubliez pas de copier ce fichier dans “c:winntsysteme32”.

2. Récupérez le fichier via un formulaire

Cette étape consiste à mettre un formulaire à la disposition de l’internaute afin qu’il précise le fichier à déposer. Ce formulaire est classique, mis à part 2 points. Le premier, qui correspond au type d’encodage “enctype=”multipart/form-data”” indique que le formulaire transmet à la fois des données au format texte et des fichiers encodés selon un autre type. Le second concerne le champ de saisie du fichier, de type “file”. En précisant ce type, vous laissez au navigateur le soin d’effectuer tout le travail d’interface. Quand l’internaute cliquera sur le bouton “Parcourir”, une boîte de dialogue s’affichera et lui proposera de parcourir le disque dur pour sélectionner le fichier.

3. Précisez les limites à respecter

Une fois que l’internaute a sélectionné le fichier qu’il souhaite déposer, des tests vous offrent la possibilité de vous assurer, avant le téléchargement définitif, que vous pouvez accepter le fichier. Vous devez pour cela fixer un certain nombre de limites : taille des images, poids des fichiers, types des fichiers acceptés… “$repertoire” constitue le répertoire de destination du fichier. Le tableau associatif “$Types_connus” indique les types de fichiers avec lesquels vous allez travailler. Il associe des extensions de fichiers à des types de fichiers. Vous êtes ainsi en mesure de tester directement le type du fichier à télécharger, plutôt qu’une simple extension. C’est un mécanisme plus performant en terme de sécurité. Un exécutable renommé avec une extension “gif”, par exemple, ne pourra pas être téléchargé. “$Types_autorises” est une commodité. Ce tableau désigne simplement les types de fichiers que vous acceptez en téléchargement.

4. Évitez les téléchargements trop lourds

Le premier test que vous allez effectuer porte sur le poids du fichier. Comparez pour cela “$monfichier_size” à la variable qui contient cette limite. Si vous souhaitez récupérer le poids d’un fichier, précisez le nom de la variable du fichier, suivi de “_size”. De la même manière, vous pouvez récupérer le nom avec “_name” et le type avec “_type”. Si le poids du fichier dépasse celui autorisé, enregistrez l’erreur dans une variable et passez au test suivant.

5. Refusez les types de fichiers incompatibles

Testez ensuite le type du fichier à télécharger avec ceux autorisés en le comparant (après l’avoir récupéré via “$monfichier_type”) avec les types stockés dans le tableau “$types_autorises”. Cette comparaison s’effectue à l’aide de l’instruction “in_array($mon fichier,$types_autorises)” que vous devez faire précéder du caractère “!”. Ce dernier signifie que si le type récupéré n’est pas contenu dans le tableau, il faut alors déclencher un message d’erreur. C’est l’objectif de la boucle While, qui liste tous les types autorisés pour renseigner l’internaute.

6. Vérifiez la taille des images

Suivez la même démarche pour les images. Tous les contrôles sont identiques ; vous êtes en outre capable de vérifier la largeur et la hauteur de l’image. Ce contrôle peut se révéler important dans le cadre du téléchargement d’un logo ou d’un objet graphique pour enrichir une page existante. À l’aide de l’instruction “ereg (“image”,$monfichier_type)”, précisez que seules les images seront soumises à ce test. “ereg” vérifie l’existence d’une chaîne de caractères dans une phrase. Vous pouvez filtrer les types d’images autorisés et refuser, par exemple, celles au format BMP qui ne sont pas adaptées au web. Lorsque vous avez la certitude que le type de l’image est autorisé, récupérez ses dimensions à l’aide de “GetImageSize()”. La variable “$taille” dans laquelle vous stockez le résultat est un tableau à une dimension, dont la première ligne contient la largeur de l’image (width) et la seconde la hauteur (height). Comme tous les tableaux, la première ligne commence à 0.

7. Téléchargez le fichier

Lorsque tous les tests ont été effectués, vous avez la certitude que le fichier peut être téléchargé sans risque. Si toutefois vous détectez des erreurs ou des incompatibilités, celles-ci sont notées au fur et à mesure des tests dans la variable “$erreur”. Si bien que tant qu’une erreur existe, vous pouvez facilement bloquer la dépose du fichier en affichant la liste des problèmes rencontrés à l’attention de l’internaute, de façon à ce qu’il les corrige. Si tous les paramètres sont bons, déplacez le fichier du répertoire temporaire vers son répertoire de stockage définitif.Utilisez pour cela la commande “move_uploaded_file(“$monfichier”, “$repertoire$monfichier_name”);”. Le premier paramètre indique le fichier temporaire ; le second précise le chemin complet de stockage du document. Dans cette mise en ?”uvre, concaténez “$répertoire” et “$monfichier_name” pour former ce chemin de destination. Vous pouvez ensuite ajouter un lien vers le fichier puis afficher l’image (s’il s’agit d’une image) afin de confirmer à l’internaute le téléchargement de son fichier.

8. Pour aller plus loin

Si vous recourez plusieurs fois au téléchargement de fichiers sur votre site, passez cet exemple de code en fonction. Cette opération simplifie la maintenance du code.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Frédéric Bordage