Maison développement back-end tutoriel php phpmaster | Téléchargement de fichiers avec PHP

phpmaster | Téléchargement de fichiers avec PHP

Mar 03, 2025 am 08:28 AM

phpmaster | Uploading Files with PHP

Téléchargement de fichiers PHP: créez un système de téléchargement sûr et fiable

Les images d'albums en ligne, les pièces jointes de messagerie et les fichiers de données d'application de traitement par lots ont une chose en commun: ils doivent tous télécharger des fichiers sur Internet via le navigateur Web de l'utilisateur. La fonction de téléchargement de fichiers est une partie importante de nombreux sites Web et applications Web qui sont utilisés chaque jour. Cet article vous montrera comment ajouter une prise en charge de téléchargement de fichiers sur votre site Web à l'aide de PHP.

Points clés

  • L'ajout de prise en charge de téléchargement de fichiers dans PHP nécessite la création d'un formulaire HTML pour les utilisateurs et un script PHP pour le traitement des fichiers téléchargés sur le serveur. L'élément <form></form> doit utiliser la méthode Post et définir la propriété ENCTYPE sur les données multipart / format.
  • Les fichiers téléchargés sont d'abord stockés dans un répertoire temporaire. Le script PHP responsable de la gestion des soumissions de formulaires valide le fichier et le traite, le déplaçant généralement d'un emplacement temporaire à un emplacement plus permanent.
  • Les informations sur les téléchargements de fichiers sont fournies via des tableaux multidimensionnels $_FILES. La fonction move_uploaded_file() déplace le fichier téléchargé d'un emplacement temporaire à un emplacement permanent et effectue des vérifications supplémentaires pour s'assurer que le fichier est en effet téléchargé via la demande de post HTTP.
  • Il existe un risque de sécurité pour les téléchargements de fichiers. Pour atténuer ces risques, vous pouvez vérifier le type de fichiers téléchargés, imposer des restrictions strictes au trafic de téléchargement et rechercher des virus. Il est également important d'assurer un nom de fichier sécurisé en remplaçant tous les caractères qui ne sont pas des lettres, des chiffres ou un ensemble très limité de marques de ponctuation par un soulignement.

Prérequis

Le téléchargement de fichiers de traitement n'est pas difficile, mais il y a quelques petits détails qui doivent être corrects, sinon le téléchargement échouera. Tout d'abord, vous devez vous assurer que PHP est configuré pour permettre des téléchargements. Vérifiez votre fichier php.ini et vérifiez que la directive File_uploads est définie sur ON.

<code>file_uploads = On</code>

Les fichiers téléchargés sont d'abord stockés dans un répertoire temporaire (ne vous inquiétez pas ... votre script PHP peut ensuite déplacer des fichiers vers un emplacement plus permanent par la suite). Par défaut, l'emplacement initial est le répertoire temporaire par défaut du système. Vous pouvez spécifier différents répertoires à l'aide de la directive upload_tmp_dir dans php.ini. Dans tous les cas, vous devez vérifier que le processus PHP a les autorisations appropriées pour écrire dans le répertoire que vous utilisez.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>

Après avoir confirmé que la configuration permet au serveur d'accepter les fichiers téléchargés, vous pouvez vous concentrer sur les détails HTML. Comme la plupart des autres interactions côté serveur de HTML, le téléchargement de fichiers utilise des formulaires. Il est très important que votre élément <form></form> doit utiliser la méthode post-post et définir la propriété ENCTYPE sur les données multipartiales / formulaires.


Écriture d'un script de téléchargement de processus

Selon votre propre expérience et les exigences mentionnées à l'heure actuelle, vous avez peut-être deviné le processus de téléchargement de fichiers.

  • Les visiteurs affichent des pages HTML contenant des formulaires spécifiquement utilisés pour prendre en charge les téléchargements de fichiers.
  • Le visiteur fournit le fichier qu'il souhaite télécharger et soumet le formulaire.
  • Le navigateur code le fichier et l'envoie dans le cadre d'une demande de poste émise au serveur.
  • PHP reçoit des soumissions de formulaires, décode le fichier et l'enregistre dans un emplacement temporaire sur le serveur.
  • Responsable de la gestion du fichier de validation de script PHP pour la soumission et le traitement du formulaire d'une manière ou d'une autre, le déplaçant généralement d'un emplacement temporaire à un emplacement plus permanent.

L'ajout de prise en charge de téléchargement de fichiers vous oblige à créer un formulaire HTML à présenter à l'utilisateur et un script PHP pour gérer les fichiers téléchargés sur le serveur.

html

Le formulaire HTML fournit l'interface pour que l'utilisateur lance le téléchargement de fichiers. N'oubliez pas que l'attribut de méthode de l'élément <input> doit être défini sur le post et que l'attribut ENCTYPE doit être défini sur multipart / formulaire de forme. Un élément de fichier <input> fournit un champ qui spécifie le fichier à télécharger. Comme tout autre élément de formulaire, il est important de fournir l'attribut de nom afin que vous puissiez le référencer dans un script PHP qui traite le formulaire. Voici un exemple de marquage pour un formulaire de téléchargement de fichiers de base:

<code>file_uploads = On</code>

Il convient de noter que différents navigateurs rendront les champs de fichiers de différentes manières. IE, Firefox et l'opéra l'affichent sous forme de champs de texte avec des boutons marqués parcourir ou sélectionner à côté d'eux. Safari le rend comme un bouton marqué uniquement en tant que fichier de sélection. Ce n'est généralement pas un problème car l'utilisateur est habitué à la façon dont le champ est rendu dans le navigateur de son choix et sait comment l'utiliser. Cependant, vous rencontrez parfois des clients ou des concepteurs qui insistent pour le présenter d'une manière ou d'une autre. Pour des raisons de sécurité imposées par le navigateur, le nombre de CSS et JavaScript qui peuvent être appliqués aux champs de fichiers est très limité. Les champs de fichiers stylés peuvent être difficiles. Si l'apparence est importante pour vous, je vous suggère de consulter le type d'entrée stylé de Peter-Paul Koch = "fichier".

php

Les informations sur les téléchargements de fichiers sont fournies via des tableaux multidimensionnels $_FILES. Ce tableau est indexé par le nom attribué aux champs de fichiers dans le formulaire HTML, tout comme $_GET et $_POST indexé par le nom. Ensuite, le tableau de chaque fichier contient l'index suivant:

  • $_FILES["myFile"]["name"] stocke le nom de fichier d'origine du client.
  • $_FILES["myFile"]["type"] Le type MIME qui stocke le fichier.
  • $_FILES["myFile"]["size"] Taille du fichier en octets.
  • $_FILES["myFile"]["tmp_name"] Le nom du fichier temporaire est stocké.
  • $_FILES["myFile"]["error"] Stockez tous les codes d'erreur générés lors du transfert.
La fonction

move_uploaded_file() dérange le fichier téléchargé d'un emplacement temporaire à un emplacement permanent. Vous devez toujours utiliser des fonctions comme move_uploaded_file() au lieu de copy() et rename() à cette fin, car il effectue des vérifications supplémentaires pour vous assurer que le fichier est en effet téléchargé via la demande HTTP Post. Si vous prévoyez d'enregistrer des fichiers avec le nom de fichier d'origine fourni par l'utilisateur, il est préférable de vous assurer que cela est sûr. Le nom de fichier ne doit contenir aucun caractères qui peut affecter le chemin de destination, tel que les barres obliques. Le nom ne doit pas non plus provoquer l'écrasement des fichiers existants avec le même nom (sauf si la conception de votre application le fait). Je m'assure un nom de fichier sûr en remplaçant tout non-lettre, numéro ou un ensemble très limité de caractères de ponctuation par un soulignement, puis ajoutant des nombres incrémentés lorsque le fichier au même nom existe déjà. Voici un exemple de réception et de traitement des téléchargements de fichiers PHP:

<code>file_uploads = On</code>

Ce code garantit d'abord qu'il n'y a pas d'erreurs dans le téléchargement du fichier. Il détermine ensuite le nom de fichier sécurisé (comme je viens de le mentionner) et utilise move_uploaded_file() pour déplacer le fichier vers son répertoire final. Enfin, appelez chmod() pour garantir que l'accès raisonnable est défini sur le nouveau fichier.

Précautions de sécurité

La plupart d'entre nous ne laisserons pas un total de fichiers aléatoires de stockage d'étranger sur notre PC, mais lorsque vous autorisez les fichiers à télécharger dans notre application, vous le faites réellement. Vous prévoyez peut-être que l'utilisateur télécharge ses propres photos comme une page de profil, mais que se passe-t-il s'il essaie de télécharger un fichier exécutable contenant du virus spécialement conçu? Je souhaite partager certaines étapes que vous pouvez prendre pour minimiser les risques de sécurité inhérents à l'autoriser les téléchargements de fichiers. L'une des étapes consiste à vérifier que le fichier téléchargé est correct. Dépenser la valeur de $_FILES["myFile"]["type"] ou l'extension du nom du fichier n'est pas sûre, car les deux sont sujets à la contrefaçon. Au lieu de cela, utilisez une fonction comme exif_imagetype() pour vérifier le contenu du fichier et déterminer s'il s'agit bien de GIF, JPEG ou de plusieurs autres formats d'image pris en charge. Si exif_imagetype() n'est pas disponible (la fonction nécessite que l'extension EXIF ​​soit activée), alors getimagesize() peut être utilisé. getimagesize() Le tableau renvoyé contiendra le type d'image (s'il est reconnu).

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>

Pour les fichiers non d'image, vous pouvez utiliser exec() pour appeler l'utilitaire de fichier UNIX. Le fichier détermine le type de fichier en recherchant des signatures binaires connues à l'emplacement attendu.

<code>file_uploads = On</code>

Une autre étape que vous pouvez prendre consiste à imposer une limite stricte à la taille totale de la demande de poste et au nombre de fichiers pouvant être téléchargés. Pour ce faire, spécifiez des valeurs appropriées pour les directives upload_max_size, post_max_size et max_file_uploads dans php.ini. La directive upload_max_size spécifie la taille maximale pour les téléchargements de fichiers. En plus de la taille téléchargée, vous pouvez également utiliser la directive Post_max_Size pour limiter la taille de toute la demande de poste. Max_file_uploads est une directive plus récente (ajoutée dans la version 5.2.12) qui limite le nombre de téléchargements de fichiers. Ces trois instructions aident à protéger votre site Web contre les attaques qui tentent de saper sa disponibilité en provoquant beaucoup de trafic réseau ou de charge système.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>

La troisième étape que vous pouvez franchir est d'utiliser le scanner de virus pour scanner les fichiers téléchargés. Ceci est crucial à l'ère d'aujourd'hui de virus et de logiciels malveillants généralisés, en particulier lorsque votre site Web permet à d'autres personnes de télécharger des fichiers téléchargés plus tard, tels que les pièces jointes dans des clients de messagerie Web ou des sites de partage de fichiers (légaux). Il existe une extension PHP qui peut accéder à Clamav, mais, bien sûr, vous pouvez appeler l'utilitaire de ligne de commande de Clamav comme je l'ai démontré pour le fichier.


Résumé

Vous avez appris à quel point il est facile d'utiliser votre site Web ou votre application Web pour prendre en charge les téléchargements de fichiers. Pour que le téléchargement réussisse, le formulaire HTML doit être soumis via une demande de poste multiparte / formulaire en codation et PHP doit permettre des transferts spécifiés à l'aide de la directive File_uploads. Une fois le fichier transféré, le script responsable de la gestion du téléchargement déplace le fichier du répertoire temporaire à l'emplacement souhaité à l'aide des informations trouvées dans le tableau $_FILES. Je partage également quelques précautions supplémentaires que vous pouvez prendre pour protéger vous-même et vos utilisateurs de certains des risques associés à l'autorisation des téléchargements de fichiers. Vous voyez comment vous assurer que les noms de fichiers sont sécurisés, vérifier les types de fichiers, imposer des restrictions strictes au trafic de téléchargement et rechercher des virus.

(Un tel contenu, tel que la section FAQ, peut être ajouté au besoin)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Étapes pour configurer un environnement de développement PHP sur Linux Étapes pour configurer un environnement de développement PHP sur Linux Jun 30, 2025 am 01:57 AM

TosetupapaphpDevelopmenttenIironmentOnLinux, installPhpanDrequiredExtensions, setupawebServerLikEapacheornginx, testwithaphpfile, andoptionallyinstallmysqlandcomposer.1.installphpandextenonsviaPackageGer (par exemple, sudoaptinstalphphp-mysqlphpur (par exemple, sudoaptinste

Comment combiner deux tableaux PHP uniques? Comment combiner deux tableaux PHP uniques? Jul 02, 2025 pm 05:18 PM

Pour fusionner deux tableaux PHP et conserver des valeurs uniques, il existe deux méthodes principales. 1. Pour les réseaux d'index ou uniquement la déduplication, utilisez Array_merge et Array_Unique Combinaisons: First Merge Array_merge ($ array1, $ array2), puis utilisez Array_Unique () pour les dédupliquer pour enfin obtenir un nouveau tableau contenant toutes les valeurs uniques; 2. Pour les tableaux associatifs et souhaitez conserver les paires de valeurs clés dans le premier tableau, utilisez l'opérateur: $ result = $ array1 $ array2, ce qui garantira que les clés du premier tableau ne seront pas écrasées par le deuxième tableau. Ces deux méthodes s'appliquent à des scénarios différents, selon que le nom de clé est conservé ou que l'accent est mis sur

php regex pour la force du mot de passe php regex pour la force du mot de passe Jul 03, 2025 am 10:33 AM

Pour déterminer la force du mot de passe, il est nécessaire de combiner un traitement régulier et logique. Les exigences de base comprennent: 1. La longueur n'est pas moins de 8 chiffres; 2. Au moins contenant des lettres minuscules, des lettres majuscules et des chiffres; 3. Des restrictions de caractère spéciales peuvent être ajoutées; En termes d'aspects avancés, la duplication continue des caractères et des séquences incrémentielles / décroissantes doivent être évitées, ce qui nécessite une détection de fonction PHP; Dans le même temps, les listes noires doivent être introduites pour filtrer les mots de passe faibles communs tels que le mot de passe et 123456; Enfin, il est recommandé de combiner la bibliothèque ZXCVBN afin d'améliorer la précision d'évaluation.

Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Comment gérer les téléchargements de fichiers en toute sécurité dans PHP? Jul 08, 2025 am 02:37 AM

Pour gérer en toute sécurité les téléchargements de fichiers PHP, vous devez vérifier la source et taper, contrôler le nom et le chemin du fichier, définir les restrictions du serveur et traiter les fichiers multimédias deux fois. 1. Vérifiez la source de téléchargement pour empêcher le CSRF via le jeton et détecter le type de mime réel via FINFO_FILE en utilisant le contrôle de liste blanche; 2. Renommez le fichier à une chaîne aléatoire et déterminez l'extension pour la stocker dans un répertoire non Web en fonction du type de détection; 3. La configuration PHP limite la taille de téléchargement et le répertoire temporaire Nginx / Apache interdit l'accès au répertoire de téléchargement; 4. La bibliothèque GD résait les images pour effacer des données malveillantes potentielles.

Porce de variable PHP expliquée Porce de variable PHP expliquée Jul 17, 2025 am 04:16 AM

Les problèmes et les solutions courants pour la portée de la variable PHP incluent: 1. La variable globale ne peut pas être accessible dans la fonction, et elle doit être transmise en utilisant le mot-clé ou le paramètre global; 2. La variable statique est déclarée avec statique, et elle n'est initialisée qu'une seule fois et la valeur est maintenue entre plusieurs appels; 3. Des variables hyperglobales telles que $ _get et $ _post peuvent être utilisées directement dans n'importe quelle portée, mais vous devez faire attention au filtrage sûr; 4. Les fonctions anonymes doivent introduire des variables de portée parents via le mot clé Utiliser, et lorsque vous modifiez les variables externes, vous devez passer une référence. La maîtrise de ces règles peut aider à éviter les erreurs et à améliorer la stabilité du code.

Commentant le code en php Commentant le code en php Jul 18, 2025 am 04:57 AM

Il existe trois méthodes courantes pour le code de commentaire PHP: 1. Utiliser // ou # pour bloquer une ligne de code, et il est recommandé d'utiliser //; 2. Utiliser /.../ pour envelopper des blocs de code avec plusieurs lignes, qui ne peuvent pas être imbriquées mais peuvent être croisées; 3. Compétences combinées Commentaires tels que l'utilisation / if () {} / pour contrôler les blocs logiques, ou pour améliorer l'efficacité avec les touches de raccourci de l'éditeur, vous devez prêter attention aux symboles de fermeture et éviter les nidification lorsque vous les utilisez.

Conseils pour écrire des commentaires PHP Conseils pour écrire des commentaires PHP Jul 18, 2025 am 04:51 AM

La clé pour rédiger des commentaires PHP est de clarifier l'objectif et les spécifications. Les commentaires devraient expliquer "pourquoi" plutôt que "ce qui a été fait", en évitant la redondance ou trop de simplicité. 1. Utilisez un format unifié, tel que DocBlock (/ * /) pour les descriptions de classe et de méthode afin d'améliorer la lisibilité et la compatibilité des outils; 2. Soulignez les raisons de la logique, telles que pourquoi les sauts JS doivent être sortis manuellement; 3. Ajoutez une description d'une vue d'ensemble avant le code complexe, décrivez le processus dans les étapes et aidez à comprendre l'idée globale; 4. Utilisez TODO et FIXME Rationalement pour marquer des éléments et des problèmes de tâches pour faciliter le suivi et la collaboration ultérieurs. De bonnes annotations peuvent réduire les coûts de communication et améliorer l'efficacité de la maintenance du code.

Comment les générateurs fonctionnent-ils en PHP? Comment les générateurs fonctionnent-ils en PHP? Jul 11, 2025 am 03:12 AM

AgeneratorInphpisamemory-EfficientwaytoterateOrgedatasetsByyieldingValuesonEatatimeIntedofreturningThemallAtonce.1.GeneratorsUsEtheieldKeywordToproduceValuesondemand, ReducingMemoryUsage.2.TheyAreusefulForHandlingBigloops, ReadingLargeFiles, OR OR.

See all articles