Maison interface Web js tutoriel Tutoriel d'introduction au téléchargement de fichiers PHP (explication avec exemples)_Connaissances de base

Tutoriel d'introduction au téléchargement de fichiers PHP (explication avec exemples)_Connaissances de base

May 16, 2016 pm 04:52 PM
php 入门教程 文件上传

一、文件上传

为了让客户端的用户能够上传文件,我们必须在用户界面中提供一个表单用于提交上传文件的请求。由于上传的文件是一种特殊数据,不同于其它的post数据,所以我们必须给表单设置一个特殊的编码:

复制代码 代码如下:


以上的enctype属性,你可能不太熟悉,因为这常常会被忽略掉。但是,如果http post请求中既有常规数据,又包含文件类数据的话,这个属性就应该显示加上,这样可以提高针对各种浏览器的兼容性。

接下来,我们得向表单中添加一个用于上传文件的字段:

复制代码 代码如下:


上述文件字段在各种浏览器中可能表现会有所不同。对于大多数的浏览器,上述字段都会被渲染成一个文本框加上一个浏览按钮。这样,用户既可以自行输入文件的路径到文本框中,也可以通过浏览按钮从本地硬盘上选择所要上传的文件。但是,在苹果的Safari中,貌似只能使用浏览这种方式。当然,你也可以自定义这个上传框的样式,使它看起来比默认的样式优雅些。

下面,为了更好的阐述怎么样处理文件上传,举一个完整的例子。比如,以下一个表单允许用户向我的本地服务器上上传附件:

复制代码 代码如下:

请上传你的附件:






提示:可以通过php.ini中的upload_max_filesize来设置允许上传文件的最大值。另外,还有一个post_max_size也可以用来设置允许上传的最大表单数据,具体意思就是表单中各种数据之和,所以你也可以通过设置这个字段来控制上传文件的最大值。但是,注意后者的值必须大于前者,因为前者属于后者的一部分表单数据。

Tutoriel d'introduction au téléchargement de fichiers PHP (explication avec exemples)_Connaissances de base
 

Figure 1. Formulaire de téléchargement affiché dans Firefox

Lorsque ce formulaire est soumis, la requête http sera envoyée à upload.php. Pour montrer exactement quelles informations sont disponibles dans upload.php, je les imprime dans upload.php :

Copier le code Code comme suit :

header('Content-Type: text/plain');
print_r($_FILES);


Faisons une expérience ci-dessous. le formulaire ci-dessus pour télécharger un logo de ce blog sur mon serveur local www.360weboy.me/upload.php et voir quelles informations seront affichées dans upload.php :
Copiez le code Le code est le suivant :
Array
                                                                                               [nom] => garçon .jpg
[type] => > [tmp_name] => D:xampptmpphp1168.tmp
[erreur] =&g t; 0
                                                                                                                > )

)



Ce qui précède est toutes les informations sur le fichier actuellement téléchargé dans le tableau global après le téléchargement du fichier. Cependant, pouvons-nous garantir que ces informations sont sécurisées ? Que se passe-t-il si le nom ou d’autres informations ont été falsifiés ? Il faut toujours être vigilant sur les informations des clients !

Parties de la requête http spécifique
Afin de mieux comprendre le téléchargement de fichiers, nous devons vérifier quelles informations spécifiques sont incluses dans la requête http envoyée par le client. La pièce jointe que j'ai téléchargée plus tôt est le logo de ce blog. Comme il s'agit d'une image, elle ne nous convient pas pour faire l'expérience ci-dessus. J'ai donc relancé un fichier texte test.text, qui contient spécifiquement le contenu suivant :


Copier le code

Le code est le suivant suit : 360w 360 jours La vie d'un Web Boy
D'accord. Maintenant, lorsque je télécharge ce fichier texte, il sera affiché dans upload.php :



Copiez le code
Le code est le suivant : Tableau (
[pièce jointe] => Tableau
(
[nom] => test.tx t
       [type] => texte/plain
                                                                                                                                                                                               — 🎜>         )

                                                                                                      
omis certains en-têtes facultatifs) :




Copier le code


Le code est le suivant :


POST /upload.php HTTP/1.1
Hébergeur : www.360weboy.me
Référent : http://www.360weboy.me/
multipart/form-data ; limite=--------------------------24464570528145
Contenu-Longueur : 234

----- ------------------------------------24464570528145
Content-Disposition : form-data ; "attachment" ; "
Type de contenu : texte/plain

360weboy

360 jours

Vie d'un Web Boy
----------- -- ----------------24464570528145--

Il y a plusieurs champs dans le format de demande ci-dessus auxquels nous devons prêter attention, à savoir le nom, filename et Content-Type Ils représentent respectivement le nom du champ de la boîte de téléchargement du fichier dans le formulaire - pièce jointe, le nom du fichier téléchargé par l'utilisateur depuis le disque dur local - test.txt et le format du fichier téléchargé - text/. plain (représentant un fichier texte). Ensuite, nous voyons une ligne vide ci-dessous, qui correspond au contenu spécifique du fichier téléchargé.

2. Amélioration de la sécurité
Afin d'améliorer la sécurité du téléchargement de fichiers, nous devons vérifier le nom et la taille du tmp dans le tableau global $_FILES. Afin de vous assurer que le fichier pointé par tmp_name est bien le fichier que l'utilisateur vient de télécharger sur le client, plutôt que de pointer vers quelque chose comme /etc/passwd, vous pouvez utiliser la fonction is_uploaded_file() en PHP pour porter un jugement :

Copier le code Le code est le suivant :


$filename = $_FILES[' attachment']['tmp_name'];

if (is_uploaded_file($filename)) {
/* Est un fichier téléchargé */
}

Dans. Dans certains cas, une fois que l'utilisateur a téléchargé le fichier, le contenu du fichier téléchargé avec succès sera affiché à l'utilisateur, il est donc particulièrement important de vérifier le code ci-dessus.

Une autre chose qui doit être vérifiée est le type MIME du fichier téléchargé, qui est le champ type du tableau de sortie dans upload.php mentionné ci-dessus. Ce que j'ai téléchargé dans le premier exemple est une image, donc la valeur de $_FILES['attachment']['type'] est 'image/jpeg'. Si vous prévoyez d'accepter uniquement les images de type MIME telles que image/png, image/jpeg, image/gif, image/x-png et image/p-jpeg côté serveur, vous pouvez utiliser un code similaire à celui-ci pour vérifier (donnez simplement un exemple. Exemples, des codes spécifiques, tels que le rapport d'erreurs, etc., doivent suivre le mécanisme de votre système) :

Copier le code Le code est le suivant :
                                                                                                                                                                                                      qui, qui, qui est, image/jpeg',
                                                                                                                                                                                                                                                                                  Allow_mimes)) {
DIE ("Désolé, le format de fichier que vous avez téléchargé est inexact ; nous n’acceptons que les fichiers image.');

Comme vous pouvez le constater, nous nous sommes assurés que le type MIME du fichier répond aux exigences côté serveur. Cependant, il ne suffit pas d'empêcher les utilisateurs malveillants de télécharger d'autres fichiers nuisibles, car cet utilisateur malveillant de type MIME peut être déguisé. Par exemple, l'utilisateur a créé une image jpg, a écrit du code php malveillant dans les métadonnées de l'image, puis l'a enregistré sous forme de fichier avec le suffixe php. Lorsque ce fichier malveillant est téléchargé, il passera avec succès la vérification du type MIME côté serveur et sera considéré comme une image, et le code PHP dangereux qu'il contient sera exécuté. Les métadonnées spécifiques de l'image sont similaires aux suivantes :
Copiez le code Le code est le suivant :


Nom du fichier : image.jpg
Taille du fichier : 182007 octets
Date du fichier : 2012:11:27 7:45:10
Résolution : 1197 x 478
Commentaire : passthru( $_POST['cmd ']); __halt_compiler();

Nous pouvons voir que du code php a été ajouté au champ Commentaire des métadonnées de l'image. Par conséquent, il est évident que pour éviter que des situations dangereuses similaires ne se reproduisent, une vérification nécessaire doit être effectuée sur l’extension du fichier téléchargé. Le code suivant améliore le code précédent pour vérifier le type Mime :
Copiez le code Le code est le suivant :


            $allow_mimes = array(
            'image/png' => image/gif' => '.gif',
'image/jpeg' => '.jpg ',
'image/pjpeg' => '.jpg'
);

$image = $_FILES['attachment'];

if(!array_key_exists( $image['type'], $allow_mimes )) {
die('Désolé, vous l'avez téléchargé, le format de fichier n'est pas exact ; nous n'acceptons que les fichiers image.');
                                                                                                                                                                  , 0, strrpos($image ['nom'], '.'));

                                                                                                                                                                                                 🎜>
// Poursuivre le traitement du fichier téléchargé


Grâce au code ci-dessus, nous nous assurons que même si le Le méta-fichier de l'image téléchargée contient du code php, le fichier image sera renommé avec le suffixe Fichier nommé format d'image, donc le code php qu'il contient ne sera pas exécuté. Le code ci-dessus n'aura aucun impact négatif sur les images téléchargées normales.

Après avoir effectué les étapes ci-dessus pour améliorer la sécurité, si vous souhaitez simplement enregistrer le fichier téléchargé dans un répertoire spécifié, vous pouvez utiliser la fonction par défaut de PHP move_uploaded_file pour y parvenir :



Copier le code


Le code est le suivant :

/* $temp_filename enregistré dans le répertoire temporaire Téléchargez le fichier, puis avec succès enregistrez-le dans le fichier attachment.txt dans le répertoire correspondant */
       }

   
Vous pouvez également limiter la taille du fichier téléchargé, vous pouvez alors la fonction de taille de fichier est utilisée pour obtenez la taille du fichier téléchargé et un traitement ultérieur est effectué après jugement. Ceci n'est pas détaillé ici, vous pouvez donc le découvrir vous-même.

D'accord, arrêtons d'écrire sur le téléchargement de fichiers ici pour le moment. J'espère que cet article d'introduction vous sera utile.
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

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.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

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)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles